2015-03-25 21 views
0

我有以下問題:MariaDB活動流的動態列?

我們有很多不同,但類似類型的數據項,我們希望在(MariaDB的)數據庫來記錄的。所有數據項都有一些常用參數,如id,用戶名,狀態,文件全局,類型,註釋,開始&結束時間戳。另外,還有很多(比如40到100之間)參數,這些參數是特定於每種類型的數據項的。

我們希望在同一個表中有不同的數據項類型,因爲它們將與其他幾個數據一起顯示在Web應用程序的單個列表中。這將顯示爲活動流或「Facebook牆」。

看起來,具有頂級泛型表的規範化方法與下面的特定表連接會導致性能不佳。爲了顯示活動流,我們必須同時執行大量連接和聯合,並且應用程序將頻繁地輪詢該查詢,因此查詢運行速度很重要。

那麼,在性能和存儲優化方面哪個更好?

  1. 利用MariaDB的的動態列
  2. 只需添加在所有不同種類,我們需要在一個表中的列,並只接受每個數據項類型將只能使用一小列,即休息將爲空。
  3. 別的東西?

如果我們使用常規列時,它們中的大量數據將爲空,那麼它有關係嗎?

什麼時候應該使用動態列以及何時使用常規列更好?

回答

1

我相信你應該爲你過濾的值有不同的列。但是,您可能有一些未經過濾的值。對於那些將它們作爲json對象存儲在單個列中可能是個不錯的主意(簡單編碼/解碼)。

+0

這與使用MariaDB的動態列類似,可以使用json格式進行提取。 1.我仍然對爲什麼一個解決方案感到困惑雖然比另一個更好。 – dbdemon 2015-03-25 17:57:26

+0

它總是取決於具體情況。如果您需要按列過濾,則需要簡化過濾。如果它是一個要解析的數據,那麼你可以使它緊湊。 – 2015-03-26 11:28:54

1
  • 一些列 - 。使用WHERE中和ORDER BY子句(但不一定是所有列可能會過濾的主要的
  • 一個JSON列或MariaDB的動態列

查看我的博客why not to use EAV schema。我專注於如何在JSON中執行此操作,但MariaDB的Dynamic Columns可以說是更好的。

+0

謝謝 - 在尋找關於此主題的解決方案之前,我實際上遇到過您的博客文章。從性能或存儲空間的角度來看,我仍不確定爲什麼這種方法比創建常規列更好。用這種方法會有性能損失嗎?空值是否佔用空間? – dbdemon 2015-03-25 23:11:42

+0

如果有20個'可選''屬性',沒問題。如果有200個,它會變得笨拙。明天你需要201; 'ALTER TABLE ADD COLUMN'是痛苦的。有幾十個指數是昂貴的和沒有生產力的。因此,我鼓勵您找出通常用於過濾的幾列,並將明確的列和索引限制爲它們。 (這些是我的看法,看到一些產品真的搞砸了。) – 2015-03-25 23:32:04

+0

我不認爲它的美學是對明確列的重要論據。重要的是是否存在性能損失或浪費存儲空間。 'ALTER TABLE ADD COLUMN'不會嚇倒我。 MariaDB使索引動態列成爲可能,但我不確定是否存在任何缺點。無論如何,無論如何,大多數索引列都是明確的列。但BLOB專欄的情況如何,在性能和存儲方面是否存在缺陷? – dbdemon 2015-03-26 10:47:38