2

我需要一个可以存储网络驱动器并允许多个用户(最多 20 个)在没有任何服务器软件的情况下使用它的数据库。

我正在考虑 MS Access 或 Berkeley DB。

你能分享你在文件数据库方面的经验吗?
你用的是哪一个,有什么问题吗?

4

9 回答 9

6

我真的不认为基于文件的数据库可以扩展到超过六个用户。上次我有一个 Access 数据库时(诚然,这是很久以前的事了),我必须非常努力地让它为 8-9 人工作。

在带有 PostgreSQL 或 MySQL 的旧垃圾计算机上安装 Ubuntu 确实容易得多。即使我保留了 Access 前端,这也是我必须做的事情。

于 2008-08-29T19:07:23.537 回答
5

我建议使用SQLite,因为整个数据库存储在一个文件中,并且它可以非常安全地处理同时访问它的多个用户。您可以将几个不同的库用于您的客户端应用程序,并且不需要服务器软件。

优势之一是它非常接近地模仿 SQL Server,因此如果您需要从使用数据库文件转换为成熟的 SQL Server,则客户端中的大多数查询都不需要更改。您只需将数据迁移到新的服务器数据库(例如,如果有将 SQLite 数据库转换为 MySQL 数据库的程序,我不会感到惊讶。)

于 2008-08-29T19:03:04.717 回答
5

当心任何基于文件的数据库,它们都可能有相同的问题。您的情况确实需要客户端/服务器解决方案。

来自 SQLite 常见问题

一个好的经验法则是,在通过网络文件系统从多台计算机同时访问同一个数据库的情况下,您应该避免使用 SQLite。

http://www.sqlite.org/whentouse.html

于 2008-09-02T08:35:52.443 回答
2

访问可能是个婊子。我一直处于不得不四处走动并告诉 20-50 人关闭访问权限的位置,这样我就可以进入“设计模式”来更改表单的设计,也许还有一个专栏。一点都不好玩。(旧访问,它可能只是一个糟糕的设置)

于 2008-08-29T18:58:04.730 回答
2

Ayende最近试图做出类似的决定,并尝试了一堆所谓的嵌入式数据库。希望他的观察可以帮助到你。

于 2008-08-29T19:08:20.350 回答
1

我已经在各种情况下(包括在线)使用 Access 一段时间了。我发现如果按照指南正确设置 Access,它的效果会很好。Access 的一个优点是它在一个包中包含所有内容:表单、查询构建、报告、数据库管理和 VBA。此外,它还适用于所有其他 Office 应用程序。Access 2007 运行时可以从这里免费获得,这使得分发成本更低。访问当然不适合大型操作,但它应该非常适合二十个用户。编辑:微软将并发用户数定为 255。

于 2008-08-30T16:47:01.463 回答
1

最初的问题对我来说毫无意义,因为这些选项不属于一起。BerkeleyDB 只是一个数据库引擎,而 Access 是一个应用程序开发工具,附带一个默认的基于文件的(即非服务器)数据库引擎 (Jet)。把Access和Berkeley放在一起,显然需要一个数据库引擎,根本不需要应用程序,但是最终用户如何在没有前端的情况下使用Berkeley DB,我不知道(我只用过它从命令行)。

那些不能同时运行 20 个用户的 Jet MDB 的人根本没有能力就使用 Jet 作为数据存储提供建议。只要遵循最佳实践,这是完全可行的。除了 Microsoft 的 Best Practices 网页、Tony Toews 的 Best PracticesTony 的 Corruption FAQ(即,为了拥有稳定的应用程序而要避免做的事情)之外,我还会推荐。

我强烈怀疑最初的提问者没有构建前端应用程序,但由于他没有说明涉及哪种前端,所以很难推荐一个与之配套的后端。Access 具有为您提供等式的两个部分的优势,并且如果使用得当,对于多个用户来说是完全可靠的。

于 2008-09-15T21:45:19.283 回答
1

可以将 Access 设置为支持 10-20 个用户吗?是的。但是,它以及所有基于文件的数据库都使用文件系统进行锁定和并发控制。而且,Access 数据文件比数据库服务器更容易受到数据库损坏的影响。而且,虽然您可以为此进行设置,但如果您想最终获得一个可靠的系统,您必须像上面 David Fenton 提到的那样遵循最佳实践。

就个人而言,我发现,考虑到您需要跳过一些障碍以确保 Access 解决方案相当无故障,实现 MSDE/SQL Server Express 或 postgreSql 实例的麻烦要少得多。

于 2008-09-16T21:15:08.787 回答
1

Berkeley DB 支持高度并发(远超过 20 个),但它主要是通过利用共享内存和互斥体(甚至可能是复制)来实现的——当 BDB 被部署为存储在网络驱动器上的文件时,这些设施不能很好地工作.

为了利用 DBD 并发功能,您必须围绕它构建应用程序。

于 2008-10-13T21:24:10.387 回答