在db中存储所有这些数据的最佳方法是什么?

时间:2017-03-16 17:37:04

标签: mysql analytics

我的客户给了我大约14k的各种产品的网址,他希望我每天存储该产品的所有价格变化。我认为这将需要大量的数据库存储和大量的优化。我以前从未这样做过。我使用的是mysql DB。我应该将每个产品的所有这些价格变化存储在JSON列中还是作为单独的行存储?寻找有关此的提示。谢谢!

1 个答案:

答案 0 :(得分: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。 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