适合海量数据的存储方式
Posted
技术标签:
【中文标题】适合海量数据的存储方式【英文标题】:Suitable storage method for huge amount of data 【发布时间】:2012-08-28 20:04:39 【问题描述】:对于海量数据,您推荐哪种存储方式? (≈ 每天 5000 万条记录)。对于 Hadoop 或 RDBMS 等系统,这种适当的情况是否仍然足以达到此目的?
【问题讨论】:
您计划将数据保留多长时间?架构有多复杂?它几乎是一个带有单个大事实表和一堆小(-ish)维度表的星型模式吗?您将对数据执行哪些类型的查询?它们会涉及整个表格还是仅涉及特定日期范围的数据(每天、每周、每月等)? 原始数据需要经过预处理、解析并聚合成报表数据。报告不会被删除,原始数据将在处理后被删除。报告将保存为数字数据。查询 - 主要会有特定数据范围的统计查询(平均、总和、最小值、最大值)。 【参考方案1】:根据您所描述的数据量,您可能确实正在进入大数据领域。根据您提供的详细信息的数量,我建议将原始数据加载到 Hadoop 集群中,运行 map/reduce 作业来解析它并加载到基于日期的目录中。然后,您可以定义一个按日期(每天?每周?)分区的外部 Hive 表,映射到您的 map/reduce 作业的结果。
下一步将取决于您的报告的复杂性和所需的响应时间。如果您可以轻松地在 SQL 中表达它们,您可以在您的 Hive 表上运行查询。如果它们更详细,您可能必须编写自定义 map/reduce 作业。许多人建议使用 Pig,但我个人更喜欢直接使用 Java。
如果您不关心报告的响应时间,您可以按需运行它们。如果您关心,但打开等待结果等待数十秒或几分钟,您也可以将报告结果存储在 Hive 中。如果您希望报告快速显示在基于 Web 或移动 UI 中,您可能希望将报告数据存储在关系数据库中。
【讨论】:
目前我们在做原型的时候,没有这么大的数据量,数据是存储在关系数据库中的。在生产中这是不可能的,现在我正在考虑生产使用中的未来数据流 - 如果应该通过基于 Web 的 UI 提供报告并且速度很重要,你有什么建议?我有一个想法,将原始数据存储在 Hadoop 中,并将处理后的数据存储在关系数据库中。谢谢你的建议。 “将原始数据存储在 Hadoop 中,将处理后的数据存储在关系数据库中”——几乎总结了我的答案。如果您可以将摘要表达为 SQL 查询,请考虑使用 Hive 在 Hadoop 中查询数据。我喜欢用 Java 写 map/reduce,但是如果我可以在一条 SQL 语句中表达摘要,那该走哪条路是没有问题的。以上是关于适合海量数据的存储方式的主要内容,如果未能解决你的问题,请参考以下文章