日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

endnote初始化数据库支持_服务端编程——数据库(MySQL、sequelize) - 天生笑点低你奈我何...

發布時間:2024/9/3 数据库 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 endnote初始化数据库支持_服务端编程——数据库(MySQL、sequelize) - 天生笑点低你奈我何... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、數據庫

前端發送api請求的流程

  • 通過API發送請求,到model進行業務處理,將數據存到或在MYSQL查詢,將數據一并給KOA服務器請求,最后將請求的結果返回給客戶端

關系型數據庫、非關系型數據庫

關系型數據庫

mysql /oracle/sql server/sqlite
我還有一篇文章 介紹了 關系型數據庫和非關系型數據的數據結構 –紅黑樹-二叉樹-B樹

1.首先了解一下 什么是關系型數據庫?
關系型數據庫最典型的數據結構是表,由二維表及其之間的聯系所組成的一個數據組
織。優點:
1、易于維護:都是使用表結構,格式一致
2、使用方便SQL語言通用,可用于復雜查詢;
3、復雜操作支持SQL,可用于一個表以及多個表之間非常復雜的查詢。缺點:
1、讀寫性能比較差,尤其是海量數據的高效率讀寫;
2、固定的表結構,靈活度稍欠
3、高并發讀寫需求,傳統關系型數據庫來說,硬盤I/O是一個很大的瓶頸

非關系型數據庫

redis / hbase /mongoDB /CouchDB /Neo4J

什么非關系型數據庫呢?

非關系型數據庫嚴格上不是一加粗樣式種數據庫,應該是一種數據結構化存儲方法的集合,可以是文檔或者鍵值對等

優點:
1、格式靈活:存儲數據的格式可以是key,value形式、文檔形式、圖片形式等等,文檔形式、圖片形式等等,使用靈活,應用場景廣泛,而關系型數據庫則只支持基礎類型
2、速度快:nosql可以使用硬盤或者隨機存儲器作為載體,而關系型數據庫只能使用硬盤;
3、高擴展性;
4、成本低:nosql數據庫部署簡單基本都是開源軟件。

缺點:
1、不提供sql支持,學習和使用成本較高
2、無事務處理
3、數據結構相對復雜,復雜查詢方面稍欠。

非關系型數據庫的分類和比較:

1、文檔型
2、key-value型
3、列式數據庫
4、圖形數據庫

二、數據庫使用

  • 采用的是MySQL+圖形化界面 navicat
  • koa采用sequelize插件來連接數據庫與程序,并配置一些數據庫的相關參數

一些基本概念

  • 主鍵:數據庫中一定要有的,且必須滿足兩個條件:1. 不重復,2. 不為空
  • 這里接下來將使用用戶的id編號作為主鍵,且采用自動增長的方式編號(這樣就不重復了),當然也可以自己寫一套id編號系統
  • 在微信中,一個用戶進入一個小程序的openid是唯一的,但不代表一個用戶只有一個openid,用戶唯一的只有unionid

sequelize使用文件

  • 將用戶信息等東西都放到config文件里,這個連接數據庫的文件放到core/中,這是整個項目連接數據庫的文件,后續操作不同表的文件都要引入它
  • 同時在這個文件里也要創建(同步)數據庫,調用sequelize的sync函數,當然要通過配置一些參數來選擇(如force: true 合并當前數據庫等)
const Sequelize = require('sequelize') const {dbName,host,port,user,password } = require('../config/config').databasesequelize.sync({force: true})const sequelize = new Sequelize(dbName, user, password, {dialect: 'mysql',host,port,logging: true,timezone: '+08:00' })

操作數據庫

  • 在app/modules下創建文件,用來管理用戶的數據庫,引入剛剛的文件
  • 里面建立User類繼承sequelize中的Model類,調用靜態方法init來初始化,設定好一些參數
  • 初始化表中的信息什么的(具體看sequelize官方文檔),記得導出哦
const {sequelize} = require('../../core/db') const {Sequelize, Model} = require('sequelize')class User extends Model {}({id: {type: Sequelize.INTEGER,primaryKey: true,autoIncrement: true},nickname: ,email: {type: ,unique: true},password: ,openid: {type: ,unique: true},test1: }, {sequelize})module.exports = {User}
  • 之后所有對數據庫的增刪改查操作都利用Model來進行,也就是這里導出出去的User類
    • 比如插入條目操作,在文件中導入這個文件 moduls/ 文件中的User,調用 (對象)即可
    • 還有很多其他操作,具體可以看sequelize官方文檔(但返回的都是Promise哦)

密碼加密(bcrydptjs庫)

  • 這時一個用來給密碼加密的庫,這里說一下基本操作和一點點小原理
  • 先引入bcryptjs庫
  • 生成salt鹽,這個salt就是用來給密碼加密的,中間傳入一個參數,默認是10,是加密的成本,越大的話產生的密碼安全性就越高 破解時需要的成本也就越高,同時耗費服務器的資源也越多
const bcryptjs = require('bcryptjs') const salt = (10) const psw = ((''), salt)
  • 且當密碼相同的時候,用salt加密出來的密碼也是不同的(在一定程度上防范了彩虹攻擊)

密碼加密方法的位置

  • 這里可以選擇在獲取到password的時候進行加密,但也可以將這個過程直接放到Model(Sequelize下的一個類 專門來進行數據庫操作的)中,也就是在 modules/ 文件中初始化User類中數據(數據庫表中數據)的時候:
password: {type: ,set (val) {// 這里有一個set方法const salt = (10)const psw = (val, salt)('password', psw)}}
  • 這里其實用到了觀察者模式,一直在看password有沒有變化,然后初始化的時候直接調用這個函數了

總結

以上是生活随笔為你收集整理的endnote初始化数据库支持_服务端编程——数据库(MySQL、sequelize) - 天生笑点低你奈我何...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。