Mysql
哪個更適合長期數據庫可擴展性:添加列或具有鍵/值儲存
對於目前只有很少(5-10)個設置但將來會有更多(最多 100 個)的應用程序,這將是更好的方法:
- 每次引入新設置時向設置表添加新列
- 將設置表作為鍵/值儲存
考慮到應用程序可能有數百萬個實例(它們都在同一個數據庫上執行並使用同一個表進行設置),數據庫可能是分片的。DB 是關係型的,即 MySQL 或 T-SQL。
作為開發人員,我更喜歡第二種變體,因此我可以在不更改數據庫架構和隨意添加/刪除設置的情況下擴展應用程序。據我了解,如果索引聚集在應用程序實例上,那麼在單個表中擁有數百萬條記錄應該不是問題。有什麼我不知道的缺點嗎?
第一個變種呢?有什麼大好處嗎?那麼列數呢:表可以擁有的列的理論限制是多少?如果我有一個包含 1000 (10 000, 1000 000) 列的表會發生什麼?那會很慢嗎?
選項 2 稱為“EAV”或實體-屬性-值
- 不相關
- 沒有數據庫級別的限制
- 除非是簡單的列表,否則需要扭曲才能讀取數據
但是,這取決於您所說的“設置”是什麼意思。如果您有幾 1000 行不是對象並且不需要約束,那麼,是的,使用此模式。這就是 SQL Server 對sys.configurations所做的事情
如果你想擁有一個可以儲存任何東西的“靈活模式”,那麼就不要. 會以淚水收場。另請參閱DBA.SE 上的 EAV 問題
請注意,“額外列”(選項 1)允許您定義預設值和數據類型安全,而“缺少行”(選項 2)需要將預設值儲存在程式碼中,並且所有內容都是數據庫中的字元串
“這取決於”