2017-03-16 117 views
-1

我的客戶給了我大約14k個各種產品的網址,他希望我能夠每天存儲該產品的所有價格變化。我認爲這需要大量的db存儲和大量的優化。我從來沒有這樣做過。我使用的是MySQL DB。我是否應該將每個產品的所有價格變化存儲在JSON列中或作爲單獨的行存儲?尋找有關這方面的提示。謝謝!在db中存儲所有這些數據的最佳方式是什麼?

+1

根據最佳數據庫規範化實踐進行存儲。如果性能成爲問題,那就考慮重新設計它。但是大多數數據庫可以處理成千上萬行,這應該不成問題。 – Barmar

+0

我正在考慮將它存儲在每個產品的json列中。這會好嗎? – user3407278

回答

1

JSON列不如正常的SQL列高效,並且應該在您不確定要使用的數據時保留。你很確定你會得到什麼數據。

這是一個非常簡單的兩表模式。一個表格用於產品,另一個用於價格變化。

create table product (
    id integer primary key auto_increment, 
    name varchar, 
    url varchar unique, 
    ...any other information about the product you might want to store... 

    index(url) 
); 

通過給它一個主鍵,它可以屏蔽URL的變化,並且減少了引用它的表必須存儲的數量。他們只需要存儲整數主鍵,而不是整個URL。該網址被編入索引以加快搜索速度。

既然您已經有產品表,其他表格可以參考它。就像價格變化表一樣。

create table product_price_changes (
    product_id integer references product(id), 
    price numeric(9,2) not null, 
    change_time datetime not null, 

    index(change_time) 
); 

此表存儲產品的價格何時發生變化以及該價格是多少。這就是你如何將數據列表附加到SQL中的東西。 change_time被索引以加快搜索速度。

通過簡單的連接,您可以按順序高效地查看特定產品的所有更改。

select price, change_time 
from product_price_changes ppc 
join product prod on ppc.product_id = prod.id 
where prod.url = ? 
order by change_time 
+0

通過這種方式存儲數據庫大小不會超過gbs的100s? 感謝您撰寫這樣一個詳細的答案。 – user3407278

+0

@ user3407278不管你如何組織它都會有相似的數據總量。 – Barmar

+0

@ user3407278這取決於你存儲的內容和存儲量,但100 GB是很多數據。您可以通過查看[變量類型的存儲需求](https://dev.mysql.com/doc/refman/5.7/en/storage-requirements.html)來存儲成本。產品表是不重要的,與其變化相比,產品相對較少。每次更改爲4(int)+ 4 + 1(數字(9,2))+ 8字節(日期時間)加上一些開銷。所以我們說每個價格變化20-30字節。加上索引。非常非常有效。 – Schwern

相關問題