我们的一个业务问题的解决方案是将大约5亿条记录存储到一个数据库中。每条记录大约有40到50列。
我有一个包含所有这些数据的文本文件,大约150 GB。(我硬盘的三分之一)
如果我以某种方式将所有这些数据加载到一个数据库中(ORACLE ?)它的表现会有多好?
我的一位同事坚持认为这绝对没问题。我甚至可以索引所有的40到50列,然后只需编写一些sql来提取数据即可。
他是对的吗?或者500万条记录对于一个数据库来说太多了吗?
附注:只需在一些非常好的答案之后添加更多信息: 40到50列将包含小字符串和/或数字。对于较小的字符串,我希望使用小于64个字符的字符串。
发布于 2011-05-17 18:47:23
如果没有关于您正在使用的RDBMS的任何信息,它是如何托管的,以及这是什么类型的数据(大文本、小数字等等),一个可靠的答案并不容易。
记录的纯粹数量应该不是问题,几乎每个现代RDBMS都可以轻松地处理5亿条或更多的记录。
它将变得更加有趣,数据是如何存储在您的RDBMS,p.e。它使用的是什么类型的文件系统,有多少磁盘空间可用于表,表如何在硬盘上展开等等,所有这些都应该考虑在内。
一般来说,我建议只索引应用程序和查询所需的列,否则它们只会减慢插入速度,占用宝贵的磁盘空间,对您毫无帮助。
这里有几个SO链接,可能会对你有进一步的帮助:
发布于 2011-05-17 18:44:41
你的同事是正确的-在数据库中500M的记录是很好的,我曾经使用过2G行的数据库,那是10年前的事了。索引每一列都是一个问题-索引将减慢每次插入新记录的速度,并且建立索引将花费大量的时间。您需要确定要运行的查询类型,然后对其进行适当的索引。有了这么多的记录,你可以通过规范化数据获得好处--扁平结构通常更快,但如果你有重复的长文本字段,那么用查找替换它们可能会带来存储和索引方面的好处。如果不看数据,就很难给出更精确的建议。
顺便说一句,如果你确实遇到了性能问题,你还可以将数据分区到物理上不同的表中,可能是按年划分的?
我的下一步(在您选择了您的DB平台并找到一个服务器之后)是加载数据并查看它的执行情况。我会看看如何批量加载您的数据--我是一个Sql Server大块头,因此Integration Services是可行的。我会确保您有一个惟一的键,如果它不在数据中,则添加一个identity列。然后,您就可以测试其中的一些内容了。SqlExpress是免费的,附带了SSIS,但它只能处理10GDB-但这足以让我们熟悉这些问题。
我经常批量加载一个4M的包含50+列的行表,大约需要2分钟。如果你想要更多一对一的建议,我很乐意离线。
https://stackoverflow.com/questions/6029489
复制相似问题