我正在从事一个大数据项目,从不同的在线销售商收集大量的产品信息,比如价格、标题、卖家等等(每个项目的30+数据点)。
一般来说,该项目有两个用例:
我首先决定使用MongoDB来进行横向扩展,因为为项目存储的数据被假定在数百个GBs的范围内,并且可以在许多MongoDB实例中使用MongoDB动态地对数据进行共享。
不会立即收集每个产品的30+数据点,但是在不同的时间,例如一个爬虫收集价格,几天后另一个收集产品描述。然而,一些数据点可能会重叠,因为两个爬虫收集例如产品标题。例如,结果可能是:
Document 1:
{
'_id': 1,
'time': ISODate('01.05.2016'),
'price': 15.00,
'title': 'PlayStation4',
'description': 'Some description'
}
Document 2:
{
'_id': 1,
'time': ISODate('02.05.2016'),
'price': 16.99,
'title': 'PlayStation4',
'color': 'black'
}因此,我最初想出了以下的想法(想法1):
因此,我在考虑一种不同的解决方案(想法2):
例如:
{
'_id': 1,
'timestamp': ISODate('04.05.2016'),
'type': 'price',
'value': 15.00
}因此,我很难为这个项目找到合适的模型和/或数据库。总括而言,以下是各项要求:
我将非常感谢任何想法(数据模型/架构,不同的数据库,.)。这也许能帮我推进这个项目。提前谢谢!
发布于 2016-05-04 14:59:05
字段/数据点是否已经知道并指定了?也就是说,你有固定的模式吗?如果是这样,那么您也可以考虑关系数据库。
DB2有一个所谓的时态数据库。在“system”形式中,DB透明地处理版本控制。任何插入都会自动加盖时间戳,每当您更新一行时,就会自动将前一行迁移到历史表(保留旧的时间戳)。此后,您可以在任何给定的时间点运行SQL查询,DB2将按照指定的时间(或时间范围)返回数据。它们还有一个“应用程序”表单,在该表单中,您指定了行插入该行时的有效时间段(例如,如果价格在特定时间内有效),但最终的SQL查询仍然以相同的方式工作。好的是,无论哪种方式,所有的时间复杂度都是由数据库管理的,您可以编写相对干净的SQL查询。
您可以在他们的DeveloperWorks站点上查看更多内容。
我知道其他关系数据库(如Oracle )也具有特殊的时间序列数据功能,可以为您管理版本控制/时间戳。
至于空间的效率和规模,我不确定,因为我没有运行那么大的数据库:-)
(OTOH,如果您没有固定的模式,或者您知道您将为不同的数据输入建立多个模式,并且不能使用稀疏表对其建模,那么像mongo这样的文档DB可能是最好的选择)
https://stackoverflow.com/questions/37029361
复制相似问题