文件数据库建议,支持多个并发用户

时间:2020-03-05 18:45:09  来源:igfitidea点击:

我需要一个可以存储网络驱动器的数据库,并且允许多个用户(最多20个)使用它而无需任何服务器软件。

我正在考虑使用MS Access或者Berkeley DB。

我们可以与文件数据库分享经验吗?
我们使用了哪一个,我们有任何问题吗?

解决方案

回答

访问可能是个bit子。我一直在我必须四处走动的位置,并告诉20-50个人关闭访问权限,以便我可以进入"设计模式"以更改表单和列的设计。一点都没有乐趣。 (旧的访问方式,可能是一个错误的设置)

回答

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

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

回答

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

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

回答

Ayende最近试图做出类似的决定,并尝试了一堆所谓的嵌入式数据库。希望他的观察能对我们有所帮助。

回答

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

回答

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

从SQLite常见问题解答

A good rule of thumb is that you
  should avoid using SQLite in
  situations where the same database
  will be accessed simultaneously from
  many computers over a network
  filesystem.

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

回答

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

那些不能同时使用20个用户运行Jet MDB的人根本没有能力就将Jet用作数据存储提供建议。只要遵循最佳实践,它是完全可行的。除了Microsoft的最佳实践网页,Tony Toews的最佳实践和Tony的腐败常见问题解答(即,为了拥有稳定的应用程序而要避免做的事情)之外,我还会建议我们。

我强烈怀疑原始发问者没有构建前端应用程序,但是由于他没有指出涉及哪种前端,因此很难推荐与之配套的后端。 Access具有为我们提供方程式的两个部分的优点,并且,如果使用得当,对于多个用户而言,它是完全可靠的。

回答

可以将Access设置为支持10-20个用户吗?是的。但是,它以及所有基于文件的数据库都使用文件系统进行锁定和并发控制。而且,Access数据文件比数据库服务器更容易受到数据库损坏的影响。而且,尽管我们可以为此进行设置,但如最终要获得可靠的系统,我们必须(如David Fenton所述)遵循最佳实践。

就个人而言,我发现,考虑到我们需要跳过以确保Access解决方案合理无故障的困境,实现MSDE / SQL Server Express或者postgreSql实例的麻烦要轻得多。

回答

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

为了利用DBD并发功能,我们将必须围绕它构建一个应用程序。