# SQL ## 【高併發問題】 READ_UNCOMMITTED:允許讀取未提交的數據更改。 READ_COMMITTED:只能讀取已提交的數據更改。 REPEATABLE_READ:在同一事務內多次讀取相同數據時,保證讀取的數據始終相同。 SERIALIZABLE:完全禁止並發,以確保事務的串行執行。 ### [樂觀鎖/悲觀鎖] ### [MVCC] https://www.51cto.com/article/719614.html ## 【mySQL和PostgreSQL差異】 https://aws.amazon.com/tw/compare/the-difference-between-mysql-vs-postgresql/ Q:使用了Queue我們還需要上鎖的原因?是因為可能會開很多條Queue?也可能有Queue之外的請求要處理嗎? ### 【資料分片】(data sharding) 將資料庫分割成在其他的shard,讓撈取資料變的較有效率,例如:航班的資料表,若可以將資料表分成國際航班&國內航班,會是比較有效率的管理方式,也可以因應當國內航班的資料庫掛了,國際得還可以使用。 https://www.explainthis.io/zh-hant/interview-guides/system-design/database-sharding-replication ## 資料庫創建函數 ## Transaction 當資料進入transaction後,就要保證裡面的程式碼一起成功,不然就恢復原狀(一起失敗)。也就是為了為戶資料庫的一致性(transcation的四大特性ACID之一)。 https://ithelp.ithome.com.tw/articles/10247034 有看過一個問題,是問說transaction裡面的事要一起做完才會一起commit,若有報錯會rollback,既然沒有commit代表事情還沒確定做了,那為什麼需要rollback? ## Primary Key選擇 資料庫理論中的《不在一個 table 中使用兩個具有重覆屬性的欄位》比如個人資料 table 中,身份證號已經可以當 PK,但你又加一個 auto increment 的欄位來做為 PK,就可能浪費了,但有些人的經驗是,身分證理論上是有唯一性,但實務上不是唯一,所以以系統的PK當作唯一可能較為保險 效能來說,uuid較低,但安全性較高: https://inf.news/technique/31802cf48d25f1e2361090606a4a6b1d.html 從架構上去選擇: https://medium.com/%E9%96%92%E8%AB%87%E8%BB%9F%E9%AB%94%E6%9E%B6%E6%A7%8B/%E9%96%92%E8%AB%87%E8%BB%9F%E9%AB%94%E6%9E%B6%E6%A7%8B-uuid-2748df80aa7e ## Connection pool 連線池,DB前的緩衝區,也就是用完DB查詢後,不馬上切斷連線,等有其他連線的時候,可以從連接池中獲取連線。 https://vocus.cc/article/5f800406fd89780001365d17 https://blog.darkthread.net/blog/sql-conn-pooling-experiment/ ## Join 較常用: innerJoin leftJoin 差別: https://www.fooish.com/sql/inner-join.html ## Join和子查詢 https://navicat.com/cht/company/aboutus/blog/1729-joins ### 子查詢 https://www.developerastrid.com/zh-tw/sql/sql-subqueries/ ## PostgreSQL jsonb相較於json是用二進制儲存 https://help.aliyun.com/document_detail/48147.html#section-kfx-uem-o8c ## 待處理疑問 SQL裡面的資料表的關聯,跟ORM裡面設定ManyToOne之類的這種關聯是一樣的意思嗎? 這是不是要找一下 join和子查詢的差別與關係 ## 未整理 學習資源: https://www.1keydata.com/tw/sql/sqlgroupby.html SELECT column FROM table name SELECT DISTINCT column FROM table name SELECT column FROM table name WHERE num >5 可以放 AND 或是 OR *sequelize op.or SELECT column FROM table name WHERE column IN 5 BETWEEN *萬用字母 % _ LIKE 萬用字母 ORDER BY ASC DESC 函數 AVG COUNT(常與DISTINCT 合起來用 )SELECT COUNT (DISTINCT Store_Name)FROM "IS NOT NULL" MIN() MAX() SUM() In Not
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up