大型数据库500万条记录

问题描述:

我们业务问题之一的解决方案是将大约500万条记录存储到数据库中。 每个记录将有大约40到50列。大型数据库500万条记录

我有一个包含所有这些数据的文本文件,大约150 GB。 (我的硬盘的第三个)

如果我要加载(以某种方式)所有这些数据到一个数据库(ORACLE?)它的性能如何?

我的一位同事坚持认为这绝对没问题。 我甚至可以将所有40到50列索引,然后编写一些sql来获取数据。

他对吗? 或者500万记录对于db来说太多了?

p.s. 只需在以下一些非常好的答案中添加更多信息: 40至50列将包含小字符串和/或数字。 对于小字符串,我打算使用小于64个字符的东西。

没有任何关于您正在使用的关系数据库管理系统的信息,它是如何托管的,以及这是什么类型的数据(大文本,小数字等),一个可靠的答案并不容易。

纯数量的记录不应该是一个问题,几乎每个现代RDBMS都可以轻松处理5亿条记录和更多记录。

数据存储在RDBMS上会变得更有趣,p.e.它使用的是什么类型的文件系统,表格有多少可用磁盘空间,表格是如何分布在硬盘上的等等,这些都应该被考虑。

一般来说,我建议只索引应用程序真正需要的列和数据用于查询的列,否则它们只会减慢插入速度,使用珍贵的磁盘空间并根本没有任何帮助。

这里有几个SO链接这可能会帮助您进一步:

你的同事是正确的 - 数据库中的500万条记录是好的,我用了2G行的数据库,这是10年前。对每一列进行索引是一个问题 - 索引会减慢每一个新的记录插入,并且构建索引需要花费很长时间。您需要确定要运行哪种查询,然后进行适当的索引。有了这么多的记录,你可以通过规范化数据来获得好处 - 平面结构往往更快,但是如果你有重复的长文本字段,那么用查找替换它们可能会给存储和索引带来好处。在没有看到数据的情况下,很难提供更精确的建议。

顺便说一句如果你打的性能probs你也可以将数据划分到物理上分离的表,也许按年?

我的下一步(选择数据库平台并找到服务器后)是加载数据并查看它的执行情况。我会看看批量加载你的数据 - 我是一个Sql服务器小组,因此Integration Services是要走的路。我会确保你有一个唯一的键,如果它不在数据中添加一个标识列。那么你准备好测试一下了。 SqlExpress是免费的,带有SSIS,但它只能处理10G数据库 - 但这足以熟悉这些问题。

我经常批量装载一个4列的行,列数超过50列,大约需要2分钟。如果您希望获得更进一步的建议,我很乐意将其脱机。