我们的一个业务问题的解决方案是将大约500万条记录存储到数据库中。 每条记录大约有40到50列。
我有一个包含所有这些数据的文本文件,大约150 GB。 (我的硬盘的第3个)
如果我将(以某种方式)将所有这些数据加载到db(ORACLE?)中它的性能如何?
我的一位同事坚持认为这绝对没问题。 我甚至可以索引所有40到50列,然后编写一些sql来获取数据。
他是对的吗? 或者对于数据库来说是500多万条记录呢?P.S。 只需在一些非常好的答案后添加更多信息: 40到50列将保留小字符串和/或数字。 对于小字符串,我打算小于64个字符。
答案 0 :(得分:3)
如果没有关于您正在使用的RDBMS的任何信息,它是如何托管的以及这是什么类型的数据(大文本,小数字等),一个可靠的答案并不容易。
纯粹的记录数量不应成为问题,几乎每个现代RDBMS都能轻松应对5亿条以上的记录。
如何将数据存储在您的RDBMS上会更加有趣,例如:它正在使用什么样的文件系统,表有多少磁盘空间,表如何在硬盘上展开,等等都应该考虑在内。
一般来说,我建议只索引应用程序所需的列以及数据用于查询的列,否则它们只会减慢插入速度,使用宝贵的磁盘空间并且根本不帮助您。
以下是一些可能对您有所帮助的SO链接:
答案 1 :(得分:2)
您的同事是正确的 - 数据库中的500M记录很好,我使用了数据库的2G行,这是10年前的事。索引每列是一个问题 - 索引将减慢每个新记录插入,并且构建索引将花费很长时间。您需要确定要运行的查询类型,然后进行适当的索引。有了这么多记录,您可以通过规范化数据获得好处 - 平面结构通常更快,但如果您有重复的长文本字段,那么用查找替换它们可能会给存储和索引带来好处。没有看到数据,就很难给出更精确的建议。
顺便说一句如果你确实遇到了性能问题,那么你也可以将数据划分为物理上独立的表格,可能是按年份划分的?
我的下一步(在您选择数据库平台并找到服务器之后)是获取数据并查看其执行情况。我看一下批量加载你的数据 - 我是一个Sql Server的家伙,所以Integration Services是要走的路。我确保你有一个唯一的密钥,如果它没有在数据中添加一个标识列。然后你准备测试一些了。 SqlExpress是免费的,附带SSIS但它只能处理10G数据库 - 但这足以让我们熟悉这些问题。
我经常批量加载一个包含50多列的4M行表,大约需要2分钟。如果您想进一步提出一对一的建议,我很高兴离线。