这与提出的另一个问题类似,但我的要求存在重大差异。我需要存储数十亿行,但它们只能按每个user_id进行搜索,而且任何给定用户都不可能拥有超过1000万行数据。鉴于我从未在整个数据集中进行搜索,我是否还必须将此视为一种不寻常的要求?
有数百列布尔和浮点数据将用于生成统计数据,我不能依赖这些搜索的汇总表,因为标准将是不可预测的。
此外,我的数据是顺序的,需要使用基于user_id和一系列时间的实时搜索(使用特殊的其他条件集)进行访问。速度比可靠性重要得多。
鉴于数据的顺序性和大数据集,HBase / Hypertable是否是主要候选者?同样,考虑到我通常会搜索几百万行或更少行,最多1000万行,这甚至会被视为一个大型数据集吗?
由于数据的连续性,Mongo不是一个好的候选者吗?我读过,因为Mongo使用二叉树存储,所以它不是一个好的候选者。我还读过map reduce不能并行化,因此没有很好的性能。如果我必须使用Hadoop,那么另一个原因就是使用HBase吗?
还有其他选项最适合我不考虑吗?
答案 0 :(得分:1)
存储数十亿行通常会成为问题,因为单个服务器上的磁盘空间不足并且分割非平凡数据集可能很困难。您没有这个问题,因为您可以拥有数千个合理大小的数据集,而不是一个庞大的数据集。
我建议使用数据存储,让您为每个用户创建一个完全独立的表(或数据库)。虽然在设计SQL数据库时通常不认为这是一个好主意,但大多数无模式存储都可以很好地处理它。
除了允许您轻松地跨服务器对数据进行分区(您可能不需要在单个用户数据集中并行化搜索),这将完全消除最大的索引并使其他索引保持合理的大小。
答案 1 :(得分:0)
根据您对将在user_id和日期范围内搜索的数据量的描述,我怀疑您将花费大部分时间等待磁盘访问。我的第一个是优化硬盘子系统。
对于您记忆的每个数据库和Oracle的数据库,SQL Server可以很好地将数据从硬盘传递到应用程序,同时执行一些计算。我遇到的问题是,在报告数据库错误后,当您站在公司总裁面前时,您会说“我已经向用户组发布了一条消息,并将等到我收到某人的回复”或“我有公司X在线,我们正在努力解决问题”