簡體   English   中英

哪個數據庫表模式用於存儲調查數據?

[英]Which database table schema for storing survey data?

我正在開發用於進行在線調查的軟件。 當很多用戶同時填寫調查時,我在處理高數據庫寫入負載時遇到了麻煩。 我當前用於存儲調查數據的表(MySQL,InnoDB)具有以下列:dataID,userID,item_1 .. item_n。 item_ *列具有與使用特定項獲取的數據類型相對應的不同數據類型。 大多數項目列都是TINYINT(1),但也有一些TEXT項目列。 大型調查可以有超過一百個項目,導致一個包含一百多列的表格。 用戶在一個http帖子中回答大約20個項目,並且相應的行必須相應地更新。 用戶可以跳過很多項,從而導致行中有很多NULL值。

我正在考慮以下解決我的寫入加載問題的方法。 我沒有使用包含多列的單個表,而是設置了與使用的數據類型相對應的多個表,例如:data_tinyint_1,data_smallint_6,data_text。 這些表中的每一個都只有以下列:userID,itemID,value(值列具有與其表對應的數據類型)。 對於一個包含例如20個項目的http帖子,我可能必須在data_tinyint_1中創建19行,在data_text中創建一行(而不是更新一個包含許多列的大行)。 但是,對於每個項目,我需要確定其數據類型(通過兩個表連接),因此我知道在哪個表中創建新行。 使用這種方法,我的基於zend框架的應用程序代碼將變得更加復雜。

我的問題:

  1. 我的解決方案對於大量寫入負載會更好嗎?
  2. 你有更好的解決方案嗎?

由於您已經開始抽象此模式以模仿實際的數據類型,因此您可能只需要為每個調查創建新的表集。 如果負載變得難以承受,那么鎖定將減少並且您可以將重負載隔離到外部機器的好處。

然后,單一調查數據庫結構可以更准確地反映您的真實世界條件和數據輸入處理程序。 它應該讓你的抽象頭痛消失。

動態創建表沒有任何問題。 在一些配置中,軟分片是優選的。

這看起來很明顯的解決方案是使用文檔數據庫進行快速寫入, 然后使用cron或類似的東西異步方式批量插入MySQL的答案 您可以在文檔數據庫中創建視圖以進行快速統計,但如果您不是文檔DBMS的粉絲,則僅在MySQ中允許過濾和其他復雜的內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM