Mysql

創建大型共享數據庫

  • September 4, 2020

我希望在 Firestore 中創建數據庫。我的程序將有多個使用者,每個使用者都有日曆並且可以創建一個事件。使用者可以與任何其他使用者共享此事件(類似於 Google 日曆),但每個使用者都可以在該事件上添加僅對自己可見的評論。所以我的問題是如何管理它。選項:

  1. 創建使用者表,每個使用者都有事件集合,如果使用者共享和事件,它會復製到自己集合中的其他使用者,每個使用者都可以輸入個人評論。但它解決了數據庫中的重複問題。
  2. 與 1 相同,但不是重複,每個使用者都將擁有一個集合來顯示與他一起撕毀的內容,並且只編輯評論所以自己。
  3. 首選方案。將所有事件放在一個表中,每個使用者將有一個連接表來知道他連接到哪個事件。所以我的問題是這樣的:如果我有 10M 使用者,並且每個使用者將有 1K 事件,我將有大小為 10M*1K 行的事件表。擁有如此巨大的表是否可以接受,並且將每個使用者的所有事件儲存在一個表中是否可以接受。在這種情況下,1 行的時間檢索是多少?
  4. 數據庫有可能從 Firestore 轉移到 SQL,所以我需要更通用的方法。

您應該避免在數據庫設計中重複行。您在事件和使用者之間存在多對多關係,因此您需要它們之間的“連接”表來執行此操作。將存在一對多的連接關係和一對多的連接關係。

連接表將包含事件和使用者的 FK 列,以及對該連接有用的任何屬性(例如可見性指示器、接受日期)。使兩個 FK 列成為唯一約束以確保沒有重複項。

您將需要另一個表,可能命名為 USER_EVENT_COMMENT,它也將 FK 到使用者表和事件表。您可以將增量用作 PK,也可以將兩個 FK 列與其他內容(可能是日期)結合起來以生成複合 PK。我認為自動增量方法更清潔。

至於限制評論的可見性,這取決於您如何從應用程序訪問數據庫。如果對數據庫的所有訪問都是相同的身份,那麼您的應用程序將需要強制可見性。如果您使用不同的身份訪問,您可以在數據庫中強制執行可見性。

至於大小,幾十億行沒什麼大不了的。正確的索引和周到的查詢構造(使用綁定變數)應該沒問題。

引用自:https://dba.stackexchange.com/questions/274962