> 100 mio 的大数据项目选择哪种数据模型。项目

     2023-04-18     43

关键词:

【中文标题】> 100 mio 的大数据项目选择哪种数据模型。项目【英文标题】:Which data model to choose for big data project with > 100 mio. items 【发布时间】:2016-05-04 13:31:43 【问题描述】:

我正在从事一个大数据项目,从不同的在线卖家那里收集大量产品信息,例如价格、标题、卖家等(每件商品 30 多个数据点)。

一般来说,该项目有 2 个用例:

    在网络应用程序或小部件中显示特定产品的最新数据点 分析历史数据,例如价格历史、产品聚类、语义分析等

我首先决定使用 MongoDB 来实现水平扩展,因为假设为项目存储的数据在数百 GB 的范围内,并且数据可以通过 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):

如上所述,在一个特定爬网过程中找到的所有数据点最终都在一个文档中。为了获得最新的产品信息,我会单独查询每个数据点并获取不超过某个阈值的最新条目,例如一周,以确保“用例 1”的产品信息不会过时,并且我们拥有所有数据点(因为单个文档可能不包含所有数据点,而仅包含一个子集)。 但是,由于某些数据点(例如产品名称)不会定期更改,因此始终保存所有数据(以便能够进行时间序列分析和高级分析)会导致数据库中的大量冗余,例如每天都会保存相同的产品描述,即使它没有改变。因此,我想我可能会检查数据库中的最新值,并且仅在值发生更改时才保存该值。但是,这会导致大量额外的数据库查询(每个数据点一个),并且由于上述时间阈值,我们将丢失数据点是否未更改或被所有者从网站上删除的信息商店。

因此,我在考虑不同的解决方案(想法 2):

我想拆分不同文档中的所有数据点,例如价格和标题存储在单独的文档中,并带有自己的时间戳。如果数据点未更改,则可以更新时间戳以指示该数据点未更改并且仍可在网站上使用。但是,这会导致小数据点(例如布尔值)的巨大开销,因为每个文档都需要自己的键、时间戳等才能使用索引快速查找/过滤/排序它们。

例如:


'_id': 1,
'timestamp': ISODate('04.05.2016'),
'type': 'price',
'value': 15.00

因此,我正在努力寻找用于该项目的正确模型和/或数据库。总结一下,就是这些要求:

收集数以亿计的产品(数百 GB 甚至 TB) 分布式爬虫在不同时间点检索重叠的产品信息子集 信息应存储在分布式、水平可扩展的数据库中 应将数据冗余降至最低 应保留有关数据点的时间序列信息

我将非常感谢任何可能帮助我推进项目的想法(数据模型/架构、不同的数据库……)。提前非常感谢!

【问题讨论】:

【参考方案1】:

字段/数据点是否已知并已指定?即,你有固定的模式吗?如果是这样,那么您也可以考虑使用关系数据库。

DB2 有一个他们称之为时态数据库的东西。在“系统”形式中,数据库透明地处理版本控制。任何插入都会自动添加时间戳,并且每当您更新一行时,前一行都会自动迁移到历史表(保留其旧时间戳)。此后,您可以在任何给定时间点运行 SQL 查询,DB2 将返回指定时间(或时间范围)的数据。它们还有一个“应用程序”表单,您可以在其中指定插入行时该行有效的时间段(例如,如果价格在特定时间段内有效),但最终的 SQL 查询仍然工作相同方式。好的是,无论哪种方式,所有时间复杂度都由数据库管理,您可以编写相对干净的 SQL 查询。

您可以通过他们的DeveloperWorks site查看更多信息。

我知道像 Oracle 这样的其他关系数据库也具有时间序列数据的特殊功能,可以为您管理版本控制/时间戳。

就空间效率和规模而言,我不确定,因为我没有运行任何大型数据库 :-)

(OTOH,如果您没有固定架构,或者您知道您将有多个架构用于不同的数据输入并且您无法使用稀疏表对其进行建模,那么像 mongo 这样的文档数据库可能是您的最好的选择)

【讨论】:

客快物流大数据项目学习框架

文章目录客快物流大数据项目学习框架前言一、项目简介二、功能介绍三、项目背景四、服务器资源规划五、技术亮点及价值六、智慧物流大数据平台客快物流大数据项目学习框架前言利用框架的力量,看懂游戏规则,... 查看详情

这个场景是大数据项目吗?

】这个场景是大数据项目吗?【英文标题】:Isthisscenarioabigdataproject?【发布时间】:2016-07-1518:10:00【问题描述】:我参与了一个分两个阶段的项目,我想知道这是否是一个大数据项目(我是这个领域的新手)在第一阶段我有这种... 查看详情

25k 用户之后的大数据流程堆栈

】25k用户之后的大数据流程堆栈【英文标题】:BigDataprocessstackafter25kusers【发布时间】:2016-06-1010:33:26【问题描述】:我有一个包含28k用户、60k地点和100万条评论的数据集。我正在实施一个推荐系统,其中考虑到用户最终会做出... 查看详情

实时即未来,大数据项目车联网之重启机制及数据积压(代码片段)

文章目录1checkpoint配置2任务重启策略3分区发现4数据积压问题4.1什么是数据积压4.2数据积压的原因4.3数据积压的后果4.4积压解决方案4.5解决数据积压方法1checkpoint配置l选择合适的Checkpoint存储方式lCheckPoint存储方式存在三种官方文... 查看详情

大数据项目4(数据清洗与集成)

数据清洗与集成一、概述二、数据抽取、转换与装载三、数据清洗1.什么是数据清洗?2.数据清洗的意义3.数据质量的重要性四、数据异常的不同类型1.语法类异常2.语义类异常3.覆盖类异常五、数据质量六、数据清洗的任务和... 查看详情

实时即未来,大数据项目车联网之重启机制及数据积压(代码片段)

文章目录1checkpoint配置2任务重启策略3分区发现4数据积压问题4.1什么是数据积压4.2数据积压的原因4.3数据积压的后果4.4积压解决方案4.5解决数据积压方法1checkpoint配置l选择合适的Checkpoint存储方式lCheckPoint存储方式存在三种官方文... 查看详情

客快物流大数据项目(一百零四):为什么选择elasticsearch作为存储服务

文章目录为什么选择ElasticSearch作为存储服务一、​​​​​​​​​​​​​​ElasticSearch简介 查看详情

客快物流大数据项目(一百零四):为什么选择elasticsearch作为存储服务

文章目录为什么选择ElasticSearch作为存储服务一、​​​​​​​​​​​​​​ElasticSearch简介 查看详情

大数据项目3(数据规约)

数据规约一、简介二、数据分析与挖掘体系位置三、数据规约方法1、维度规约(DimensionalityReduction)(1)小波变换(WaveletTransform,WT)(2)主成分分析(PrincipalComponentAnalysis, 查看详情

hive大数据实战项目---用户行为分析

参考技术A相关精彩专题链接:数据成就更好的你一、项目需求本案例的数据为小程序运营数据,以行业常见指标对用户行为进行分析,包括UV、PV、新增用户分析、留存分析、复购分析等内容。项目需求如下:1.日访问量分析,... 查看详情

客快物流大数据项目(八十九):clickhouse的数据类型支持(代码片段)

文章目录ClickHouse的数据类型支持一、整型二、​​​​​​​浮点型三、​​​​​​​​​​​​​​Decimal四、布尔型五、字符串类型六、​​​​​​​​​​​​​​UUID七、​​​​​​​Date类型八、​​​​​​​Da... 查看详情

客快物流大数据项目:大数据项目为什么使用docker

目录大数据项目为什么使用Docker一、场景一二、场景二三、场景三大数据项目为什么使用Docker随着大数据平台型产品方向的深入应用实践和Docker开源社区的逐渐成熟,业界有不少的大数据研发团队开始使用Docker。简单来说... 查看详情

大数据项目之电商数仓-用户行为数据采集(代码片段)

数据仓库简介数据仓库是为企业所有决策制定过程,提供所有系统数据支持的战略集合,通过数据仓库中的数据的分析,可以帮助企业改进业务流程、控制成本、提高产品质量等。项目需求实时采集买点的用户行为数... 查看详情

客快物流大数据项目(四十二):java代码操作kudu(代码片段)

目录Java代码操作Kudu一、构建maven工程二、导入依赖三、​​​​​​​创建包结构四、​​​​​​​初始化方法五、​​​​​​​创建表六、​​​​​​​插入数据七、​​​​​​​查询数据八、修改数据九、​​​... 查看详情

客快物流大数据项目(七十三):impala数据导入方式

文章目录Impala数据导入方式一、loaddata二、insertintovalues三、insertintoselect四、createasselectImpala数据导入方式一、loaddata 查看详情

客快物流大数据项目(七十九):impala映射kudu表(代码片段)

文章目录Impala映射kudu表一、​​​​​​​​​​​​​​登录Hue页面1、选择Impala2、登录Hue页面二、选择Impala执行引擎1、选择Impala执行引擎2、进入编写执行sql语句窗口三、执行sql语句映射Kudu表Impala映射kudu表一、​​​​​... 查看详情

客快物流大数据项目(九十九):clickhouse中update/delete的使用

文章目录Clickhouse中update/delete的使用一、创建表二、插入数据到MergeTree引擎的表三、更新数据 查看详情

客快物流大数据项目(六十):将消费的kafka数据转换成bean对象(代码片段)

目录将消费的kafka数据转换成bean对象一、将OGG数据转换成bean对象二、​​​​​​​将Canal数据转换成bean对象三、完整代码将消费的kafka数据转换成bean对象一、​​​​​​​将OGG数据转换成bean对象实现步骤:消费kafka的log... 查看详情