包含7亿条记录的表的数据库

时间:2012-04-10 17:06:12

标签: c# .net sql-server database sqlite

  

可能重复:
  What are the performance characteristics of sqlite with very large database files?

我想创建一个使用数据库的.Net应用程序,该数据库在其中一个表中包含大约7亿条记录。我想知道SQLite的性能是否能满足这种情况,还是应该使用SQL Server。我喜欢SQLite给我的可移植性。

4 个答案:

答案 0 :(得分:4)

确定转到SQL Server。 SQLite中有7亿条记录太多了。

使用SQLite,您有以下限制

  • 单进程写入。
  • 没有镜像
  • 无复制

查看此主题:What are the performance characteristics of sqlite with very large database files?

答案 1 :(得分:2)

SQLite应该能够处理这么多数据。但是,您可能必须将其配置为允许它增长到这个大小,并且您不应该在SQLite的“内存”实例中拥有这么多数据,只是基于一般原则。

有关更多详细信息,请参阅this page,其中解释了SQLite引擎的实际限制。相关配置设置是页面大小(通常为64KB)和页面计数(最多64位int的最大值约为21亿)。算一算,整个数据库可以占用140TB以上。一个由700m行的单个表组成的数据库将大约数十个演出;易于管理。

然而,仅仅因为SQLite CAN存储了那么多数据并不意味着你应该。 SQLite对于大型数据存储的最大缺点是SQLite代码作为进程的一部分运行,使用调用它的线程并占用沙箱中的内存。您没有获得面向服务器的DBMS中可用的工具来“划分和征服”大型查询或数据存储,例如复制/群集。在处理像这样的大表时,插入/删除将花费很长时间将它放在正确的位置并更新所有索引。选择可以是适合居住的,但仅限于索引查询;页面或表扫描绝对会杀了你。

答案 2 :(得分:2)

700米很多。

给你一个想法。假设您的记录大小为4个字节(基本上存储单个值),那么您的数据库将超过2GB。如果您的记录大小接近100字节,则接近65GB ...(不包括索引和事务日志文件等使用的空间)。

我们在大型数据库上做了很多工作,我从不认为SQLLite适用于那么大的数据。坦率地说,“便携性”是您最关注的问题。为了使用任何类型的响应来查询该大小的数据库,您将需要一个适当大小的数据库服务器。我用32GB的RAM和快速驱动器启动

如果它写得很重90%+,你可能会减少更小的RAM。如果它读得很重,那么你会想要尝试构建它,以便机器可以尽可能多地加载RAM中的DB(或至少索引)。否则,您将依赖于磁盘主轴速度。

答案 3 :(得分:0)

我有相似记录计数的表格,并且检索没有问题。

对于初学者来说,服务器的硬件和分配是您可以开始的地方。请参阅以下示例:http://www.sqlservercentral.com/blogs/glennberry/2009/10/29/suggested-max-memory-settings-for-sql-server-2005_2F00_2008/

无论您的记录大小或数量如何:

  • 在外键上创建索引,
  • 在视图中存储常见查询(http://en.wikipedia.org/wiki/View_%28database%29),
  • 并定期维护数据库和表格
你应该没事的。此外,为每列设置正确的列类型/大小将有所帮助。