2017-06-18 69 views
0

我從MySQL閱讀:MySQL的分片和分區在分佈式系統

「與其他碎片化的數據庫,用戶不會丟失的能力 執行JOIN操作,犧牲ACID的保證或參照 完整性(外貿Keys)跨越分片執行查詢和交易 「。

爲了我的理解。 當你選擇SQL vs NoSQL時。

你會選擇NoSQL來實現簡單的橫向擴展(分片和分區),例如你有很多數據不能保存在單個數據庫中,但是會減少事務級ACID和數據庫級連接。

您將爲ACID保證和數據庫連接選擇SQL。但是,要減少橫向可用性。 (你可以在mySQL的頂部添加一層來處理分區和共享自己,但如果你這樣做,你的意志仍然會失去ACID並加入)

但是,上面的語句聲明mySQL是一個「完美」的數據庫,可以處理既可擴展性又保持SQL數據庫的優勢。我在這裏錯過了什麼,或者它只是廣告?

此外,我沒有找到關於mySQL的分片架構如何看起來像任何信息?

+0

這是一個學術問題嗎?或者你是否處於Facebook/Twitter /開始階段?如果是後者,那麼最好的辦法就是實施_something_,並認真計劃每季度重寫一次。在這樣做的時候,你會了解你是否真的需要ACID,NoSQL,Sharding等等,並且你會決定做出取捨。也就是說,回答你的問題還爲時過早。 –

回答

1

你摘錄的報價是從the marketing copy for MySQL NDB Cluster,這是不同於普通的MySQL。

MySQL NDB集羣是一個分佈式數據庫,主要爲高可用性構建,通過使每個組件都是冗餘的。存儲是分佈式的,您可以擁有多個將SQL操作應用於多個存儲節點上的數據的mysqld實例。

但也有缺點。當通過主鍵查詢單個行時,NDB集羣效率更高(聽起來有點像分佈式鍵值存儲,如Cassandra,對吧?)。

+0

Cassandra是基於列家族的權利?但是,我認爲大多數NonSQL數據庫不能保證ACID並且不會支持連接。 MySQL NDB集羣體系結構在共享時如何保持普通的SQL優勢? – user1947415

+0

是的,與Cassandra不同,NDB羣集確實支持ACID和SQL。我的觀點是,它優化了主鍵查找,而不是範圍謂詞。 –

1

正如已經回覆的摘錄是關於MySQL簇(NDB)的。 MySQL Cluster將數據存儲在一組NDB數據節點中,其中 可以從連接到 NDB羣集的任何MySQL服務器訪問。

NDB使用事務來更新數據,並遵循ACID 原則與一些特殊的和身邊的優化與D.所以 我們提供網絡耐用,這意味着交易 致力於在內存中的所有活動副本提交之前 發送到應用程序。在大約1秒鐘內,所有生命複製品上的耐用媒體上的耐用性也會持續保持在 之間。

數據節點被分組到節點組(或多或少的 碎片的同義詞)。一個節點組中的所有節點包含 該節點組中的所有數據。只要每個 節點組中的一個節點處於活動狀態,則該集羣仍處於活動狀態。

事務可以跨越所有節點組(碎片)。有可能 執行跨所有節點組(碎片)的連接操作。 連接操作由MySQL服務器執行,但是 許多連接被下推到NDB數據節點,使得它們自動並行化。

有許多的基礎接入方法: 1)一鍵訪問 2)獨特的密鑰訪問(== 2主鍵訪問) 3)分區修剪掃描訪問(分區關鍵是在條件提供) (這可以是有序索引掃描或全面掃描)。這將只有 掃描表的一個分區。 4)有序索引掃描 此掃描使用有序索引 5)全部表掃描 該掃描將掃描將掃描表中的所有分區,並檢查每一行

所有這些接入類型的將掃描並聯的所有分區可以具有在訪問數據時在數據節點中評估的條件下推。

因此,在MySQL Cluster中,您可以在分片系統中獲得SQL和ACID。

如果它適合您的需要取決於您的日常使用情況 用例。