使用SQLite数据库作为后端,MS Access作为前端,数据量超过2GB。

5

我多年来一直在使用微软Access,但不可避免地,我需要转向其他数据库系统。现在,SQLite似乎非常适合我的当前工作环境。我知道在Microsoft Access上使用SQLite后端相当容易。然而,我也知道当Microsoft Access数据库超过2 GB时往往会出现问题。我意识到SQLite并没有2GB的限制,但是如果我有一个10GB的数据集在一个SQLite数据库中,并在MS Access上使用它作为前端,那么我会遇到性能问题吗?它能处理还是不会有影响,因为后端是SQLite数据库?我对这方面的理解很无知,但是如果我继续毫无头绪地寻找答案并且仍然找不到解决方法,则会更加无知。谢谢!


1
如果我在谈论GBytes,我会考虑Postgres或者可能是MySQL -- 或者在你的情况下是SQL Server的某个版本。然而,这不是推荐产品的地方。 - Gordon Linoff
3个回答

3
数据引擎非常快。实际上,在本地计算机上,使用JET/ACE比运行为本地实例的SQL Server表现更佳。
目前不清楚SQLite的ODBC驱动程序有多好或是否经过优化,但是在这样的设置下,性能应该与其他任何东西一样快,甚至可能比运行某种类型的SQL Server的本地实例更快。公平地说,因为计算机通常具有额外的处理器(核心),所以即使在本地计算机上运行服务器数据库也可以产生更好的性能,因为您正在使用“更多”处理器来完成相同的工作。
忽略线程问题(据我所知,JET/ACE和SQLite都没有线程支持,因此无法真正利用多个CPU核心)。
然而,从原始性能的角度来看,我猜想SQLite比JET/ACE慢,但我从未真正仔细研究过。
包含数百万行数据的表对于ACE/JET和Access来说并不稀奇,我建议SQLite会产生类似的结果,但允许您避开2G的限制。如果文件接近2G的限制,则应考虑使用基于服务器的数据库系统。但是,如果数据库不需要多用户,则再次使用像jet或SQLite这样的“文件”内部文件数据引擎不应对使用本地服务器系统造成任何特殊的性能惩罚。
如果涉及网络或多个用户,则独立运行的服务器系统(因此在单独的CPU核心上)是更好的选择。
我已经测试了Access中的SQLite,但没有测试大型文件,因此不知道它对于大表的工作效果如何。我的意思是,5或10百万行将容易适合JET数据库,因此如果您超出JET,则数据集必须相当大。SQL Express是免费的,并且允许高达10GB,但是您当然必须在独立计算机上设置和运行“服务器”数据库,而通常这不值得设置时间。

你可以通过调整SQLite来使用多线程,不过这主要是用于排序结果的。 - Shawn

1
我想我的回答和John上面的回答非常相似。此外,您可以利用分析数据库工具并检查表是否已规范化。拆分后端数据库。不要将图像和照片存储在accdb文件中,只需为它们创建数据库外部链接。有许多方法可以减小大小。

1

切换 Access 的 BE 相对容易,但如果你不知道如何“处理”新的 BE 优缺点,那么你不会走得太远,反而会给当前的问题增加麻烦。
如果您的主要关注点是大小,您可以将数据拆分为多个 BE(.mdbs,.accdbs),仍然保持在 Access 生态系统中。
此外,您必须考虑 SQLite 更加面向单用户,因此如果您打算在网络中使用它,这将会有问题。如果您是应用程序的唯一用户,则将“真实”的数据保留在 Ms Access 中,并将“额外”的数据存储到 SQLite DB 中(例如文档、照片等)是一个很好的使用方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接