Database 处理针对数十亿行连续数据的实时查询的最佳数据存储?

Database 处理针对数十亿行连续数据的实时查询的最佳数据存储?,database,database-design,nosql,Database,Database Design,Nosql,这类似于另一个被问到的问题,但在我的需求中有一些关键的区别。我需要存储数十亿行,但它们只会按每个用户的id进行搜索,任何给定的用户都不可能拥有超过1000万行的数据。考虑到我从未在整个数据集上搜索过,我是否需要将其视为一项不寻常的要求 有数百列布尔和浮点数据将用于生成统计数据,我不能依赖汇总表来进行这些搜索,因为条件是不可预测的 此外,我的数据是连续的,需要使用基于用户id和时间范围的实时搜索来访问(使用一组特殊的其他条件)。速度比可靠性重要得多 鉴于数据的连续性和大数据集,HBase/Hyp

这类似于另一个被问到的问题,但在我的需求中有一些关键的区别。我需要存储数十亿行,但它们只会按每个用户的id进行搜索,任何给定的用户都不可能拥有超过1000万行的数据。考虑到我从未在整个数据集上搜索过,我是否需要将其视为一项不寻常的要求

有数百列布尔和浮点数据将用于生成统计数据,我不能依赖汇总表来进行这些搜索,因为条件是不可预测的

此外,我的数据是连续的,需要使用基于用户id和时间范围的实时搜索来访问(使用一组特殊的其他条件)。速度比可靠性重要得多

  • 鉴于数据的连续性和大数据集,HBase/Hypertable是否是主要候选?再说一次,考虑到我通常只搜索几百万行或更少,最多搜索1000万行,这会被认为是一个大数据集吗

  • 由于数据的连续性,Mongo不是一个很好的候选者吗?我已经读到,因为Mongo使用二叉树存储,所以它不是一个好的候选。我还读到map-reduce不能并行化,因此没有很好的性能。如果我必须使用Hadoop,这是使用HBase的另一个原因吗

  • 有没有另一个我没有考虑的最合适的选择


存储数十亿行通常会成为一个问题,因为单个服务器上的磁盘空间不足,对非平凡数据集进行分区可能会很困难。您没有这个问题,因为您拥有的不是一个巨大的数据集,而是一千个大小合理的数据集

我建议使用一个数据存储,让您为每个用户创建一个完全独立的表(或数据库)。虽然在设计SQL数据库时,这通常不是一个好主意,但大多数无模式存储都可以很好地处理它


除了允许您轻松地跨服务器划分数据(您可能不需要在单个用户数据集中并行搜索),这将完全消除最大的索引,并将其他索引保持在合理的大小

存储数十亿行通常会成为一个问题,因为单台服务器上的磁盘空间不足,对非平凡数据集进行分区可能会很困难。您没有这个问题,因为您拥有的不是一个巨大的数据集,而是一千个大小合理的数据集

我建议使用一个数据存储,让您为每个用户创建一个完全独立的表(或数据库)。虽然在设计SQL数据库时,这通常不是一个好主意,但大多数无模式存储都可以很好地处理它


除了允许您轻松地跨服务器划分数据(您可能不需要在单个用户数据集中并行搜索),这将完全消除最大的索引,并将其他索引保持在合理的大小

根据您对将要搜索的数据量的描述,给定用户id和日期范围,我怀疑您将花费大部分时间等待磁盘访问。我的第一个想法是优化硬盘子系统


对于Memion和Oracle中的每个数据库,SQL Server都可以很好地将数据从硬盘传递到应用程序,同时执行一些计算。我要问你的问题是,当你在报告数据库错误后站在公司总裁面前时,你会说“我已向用户组发布了一条消息,将等待有人回复”还是“我有X公司的电话,我们正在努力解决问题”

根据您对给定用户id和日期范围将要搜索的数据量的描述,我怀疑您将花费大部分时间等待磁盘访问。我的第一个想法是优化硬盘子系统


对于Memion和Oracle中的每个数据库,SQL Server都可以很好地将数据从硬盘传递到应用程序,同时执行一些计算。我要问你的问题是,当你在报告数据库错误后站在公司总裁面前时,你会说“我已向用户组发布了一条消息,将等待有人回复”还是“我有X公司的电话,我们正在努力解决这个问题”

,作为一种好奇,您存储的数据类型需要数十亿(超过十亿)行?这实际上取决于您的数据结构以及需要对其执行的操作。您应该首先确定哪种数据存储类型适合您,然后再确定该类型中的哪一种。我当然可以看到您使用Map/Reduce函数查询数据和执行聚合操作。您真的不是想说“速度比可靠性重要得多”吗?我认为Map Reduce的要点是它是可并行的?好奇的是,您存储的数据类型需要数十亿美元(如超过十亿)行数?这实际上取决于您的数据结构以及需要对其执行的操作。您应该首先确定哪种数据存储类型适合您,然后再确定该类型中的哪一种。我当然可以看到您使用Map/Reduce函数查询数据并执行聚合操作。您确实做到了不是说“速度比可靠性重要得多”吧?我想map reduce的要点是它是可并行的?