如何在数据库中存储20,000个项目的更改数据

时间:2014-06-23 05:38:16

标签: python database-design data-analysis

我有20,000件不同的商品,我想跟踪。它们都具有相同的属性:名称,高度,重量,分配的ID和成本(这些只是示例)。某些属性(如名称和分配的ID)不会永远改变。对于其他人而言,其他属性会迅速变化(每小时5-10次),很少(一周或每月1-2次)变化。我想要一种方法来跟踪数据库中的所有这些变化,以便我可以对变化进行一些分析。

现在,我几乎没有数据库经验。我之前从未处理过这么多信息,因此刚刚使用csv文件。此外,我使用python代码来检索数据,并将使用它来分析它。因此,我认为sqlite,我相信很容易使用python,可能是我最好的选择。我在想我可以为每个项目创建一个表,并将属性设置为列,并且每行都会进行更改。但是,我觉得可能有更好的(效率和存储大小明智)方法来做到这一点。

如果有人能够概述存储这些数据的最佳方式,以便定期检索分析不会太困难,那将非常感激。

另外,如果你能指出一些资源来对python中的这类数据进行数据分析,那也很棒。

提前致谢

1 个答案:

答案 0 :(得分:0)

对于简单的数据库内容,SQLAlchemy是您的朋友:http://www.sqlalchemy.org/

该文档包括a fairly comprehensive tutorial,其中介绍了使用数据库所涉及的高级概念,以及如何直接在Python中设计和使用表。

这是一个示例,展示了如何在代码中定义表。然后SQLAlchemy将负责管理数据库,您可以将它们作为普通的Python对象使用。

>>> from sqlalchemy import Column, Integer, String
>>> class User(Base):
...     __tablename__ = 'users'
...
...     id = Column(Integer, primary_key=True)
...     name = Column(String)
...     fullname = Column(String)
...     password = Column(String)
...
...     def __repr__(self):
...        return "<User(name='%s', fullname='%s', password='%s')>" % (
...                             self.name, self.fullname, self.password)

另外,本教程使用SQLite数据库!

我还建议您在处理数据库时查看数据库,以帮助更好地了解引擎盖下发生的情况。您没有提到您正在使用的环境,但是有很多不同的选项可供探索SQLite数据库:Linux中的sqlite3,Windows中的SQLite Database browser等。

<强>更新

关于问题的其他部分,您可能希望阅读database normalization

(基本)标准化的一般概念是,不同的类似信息应该在一个地方保存在一起,而不是在许多不同的表格中重复。

根据您提供的简要说明,我的方法是Widgets表格,它会为您要跟踪的每个项目存储ID和名称,然后会列出Dimensions表格所有的变化:

+-----------+----------------------+--------+--------+-----+
| widget_id |    change_time       | height | weight | ... |
+-----------+----------------------+--------+--------+-----+
|         0 | 05-12-2014 18:30:58  |      4 |     10 | ... |
|         0 | 06-22-2014 12:32:46  |      4 |     12 | ... |
|         0 | 06-23-2014 01:02:00  |      6 |     12 | ... |
|                           ...                            |

每当发生更改时,都会向Dimensions表添加一个条目。这样,您可以查看过去任何时间的维度,分析随时间的变化等等。