我想创建一个 .Net 应用程序,该应用程序使用一个数据库,其中一个表中包含大约 7 亿条记录。我想知道 SQLite 的性能是否可以满足这种情况,或者我应该使用 SQL Server。我喜欢 SQLite 给我的可移植性。
4 回答
一定要选择 SQL Server。SQLite 中的 7 亿条记录太多了。
使用 SQLite,您有以下限制
- 单进程写入。
- 无镜像
- 无复制
SQLite 应该能够处理这么多数据。但是,您可能必须对其进行配置以使其增长到这个大小,并且您不应该在 SQLite 的“内存中”实例中拥有这么多数据,这只是一般原则。
有关更多详细信息,请参阅此页面,该页面解释了 SQLite 引擎的实际限制。相关的配置设置是页面大小(通常为 64KB)和页面计数(最多 64 位 int 的最大值约为 21 亿)。算一算,整个数据库可以占用超过 140TB。由具有 700m 行的单个表组成的数据库将是数十个 gigs 的数量级;易于管理。
然而,仅仅因为 SQLite 可以存储这么多数据并不意味着你应该。SQLite 对于大型数据存储的最大缺点是 SQLite 代码作为进程的一部分运行,使用调用它的线程并占用沙箱中的内存。您无法获得面向服务器的 DBMS 中可用的工具来“分而治之”大型查询或数据存储,例如复制/集群。在处理这样的大表时,插入/删除将需要很长时间才能将其放置在正确的位置并更新所有索引。选择可能是宜居的,但仅限于索引查询;页面或表格扫描绝对会杀死你。
700m很多。
给你一个想法。假设您的记录大小为 4 个字节(基本上存储一个值),那么您的数据库将超过 2GB。如果您的记录大小接近 100 字节,那么它接近 65GB...(这不包括索引使用的空间和事务日志文件等)。
我们在大型数据库上做了很多工作,我永远不会考虑使用 SQLLite 来处理这种规模的任何事情。坦率地说,“可移植性”是您最不关心的问题。为了以任何响应能力查询该大小的数据库,您将需要一个适当大小的数据库服务器。我会从32GB 的 RAM 和快速驱动器开始。
如果它的写入量超过 90%,那么您可能会使用较小的 RAM。如果它的阅读量很大,那么您将需要尝试构建它,以便机器可以在 RAM 中加载尽可能多的数据库(或至少是索引)。否则,您将依赖于磁盘主轴速度。
我有类似记录数的表,并且在检索方面没有问题。
对于初学者,您可以从硬件和服务器分配开始。有关示例,请参见: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),
- 并定期维护数据库和表
你应该没事。此外,为每列设置正确的列类型/大小将有所帮助。