2017-03-16 60 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

相关问题