我需要一个可以存储网络驱动器并允许多个用户(最多 20 个)在没有任何服务器软件的情况下使用它的数据库。
我正在考虑 MS Access 或 Berkeley DB。
你能分享你在文件数据库方面的经验吗?
你用的是哪一个,有什么问题吗?
我需要一个可以存储网络驱动器并允许多个用户(最多 20 个)在没有任何服务器软件的情况下使用它的数据库。
我正在考虑 MS Access 或 Berkeley DB。
你能分享你在文件数据库方面的经验吗?
你用的是哪一个,有什么问题吗?
我真的不认为基于文件的数据库可以扩展到超过六个用户。上次我有一个 Access 数据库时(诚然,这是很久以前的事了),我必须非常努力地让它为 8-9 人工作。
在带有 PostgreSQL 或 MySQL 的旧垃圾计算机上安装 Ubuntu 确实容易得多。即使我保留了 Access 前端,这也是我必须做的事情。
我建议使用SQLite,因为整个数据库存储在一个文件中,并且它可以非常安全地处理同时访问它的多个用户。您可以将几个不同的库用于您的客户端应用程序,并且不需要服务器软件。
优势之一是它非常接近地模仿 SQL Server,因此如果您需要从使用数据库文件转换为成熟的 SQL Server,则客户端中的大多数查询都不需要更改。您只需将数据迁移到新的服务器数据库(例如,如果有将 SQLite 数据库转换为 MySQL 数据库的程序,我不会感到惊讶。)
当心任何基于文件的数据库,它们都可能有相同的问题。您的情况确实需要客户端/服务器解决方案。
来自 SQLite 常见问题
一个好的经验法则是,在通过网络文件系统从多台计算机同时访问同一个数据库的情况下,您应该避免使用 SQLite。
访问可能是个婊子。我一直处于不得不四处走动并告诉 20-50 人关闭访问权限的位置,这样我就可以进入“设计模式”来更改表单的设计,也许还有一个专栏。一点都不好玩。(旧访问,它可能只是一个糟糕的设置)
最初的问题对我来说毫无意义,因为这些选项不属于一起。BerkeleyDB 只是一个数据库引擎,而 Access 是一个应用程序开发工具,附带一个默认的基于文件的(即非服务器)数据库引擎 (Jet)。把Access和Berkeley放在一起,显然只需要一个数据库引擎,根本不需要应用程序,但是最终用户如何在没有前端的情况下使用Berkeley DB,我不知道(我只用过它从命令行)。
那些不能同时运行 20 个用户的 Jet MDB 的人根本没有能力就使用 Jet 作为数据存储提供建议。只要遵循最佳实践,这是完全可行的。除了 Microsoft 的 Best Practices 网页、Tony Toews 的 Best Practices和Tony 的 Corruption FAQ(即,为了拥有稳定的应用程序而要避免做的事情)之外,我还会推荐。
我强烈怀疑最初的提问者没有构建前端应用程序,但由于他没有说明涉及哪种前端,所以很难推荐一个与之配套的后端。Access 具有为您提供等式的两个部分的优势,并且如果使用得当,对于多个用户来说是完全可靠的。
可以将 Access 设置为支持 10-20 个用户吗?是的。但是,它以及所有基于文件的数据库都使用文件系统进行锁定和并发控制。而且,Access 数据文件比数据库服务器更容易受到数据库损坏的影响。而且,虽然您可以为此进行设置,但如果您想最终获得一个可靠的系统,您必须像上面 David Fenton 提到的那样遵循最佳实践。
就个人而言,我发现,考虑到您需要跳过一些障碍以确保 Access 解决方案相当无故障,实现 MSDE/SQL Server Express 或 postgreSql 实例的麻烦要少得多。
Berkeley DB 支持高度并发(远超过 20 个),但它主要是通过利用共享内存和互斥体(甚至可能是复制)来实现的——当 BDB 被部署为存储在网络驱动器上的文件时,这些设施不能很好地工作.
为了利用 DBD 并发功能,您必须围绕它构建应用程序。