对于小的项目,我需要利用简单的数据库具有非常光要求:几个表,不超过几千上万的记录,在总共2或3中的用户。我的工作。净的环境。

作为一个数据库服务器(即使是那些表达版本)似乎是一个巨大的矫枉过正,在这种情况下,一个非常简单的MDB数据库可以做大部分要求。我但是,关心并发。我的想法是对的地方。mdb文件上的一个网络共享,并允许用户访问这一文件。净基于客户。该数据库是大多旨在只读操作,但用户将偶尔需要更新/删除记录。如果这不可能在时间(由于数据库被锁或任何),我可以举行更新客户和处理它们在稍后的时间。

这个问题本身一起去这些要点:

  • 怎样同时进行读取处理MDB?
  • 怎样同时进行更新/删除处理MDB?
  • 是否有一个概念锁我怎么能利用其中的一个。净的应用程序?
  • 是把MDB文件上的一个网络分享良好或可怕的想法?

作为我的工作。净的,我也想知道我怎么可以检测任何并发问题和采取适当的行动。即, 其异常应当我抓到什么行动你会建议采取?

编辑:这可能是我不好说明问题,但大多数的答案似乎建议将对一个完全成熟的DB服务器。我做了解分歧和利益的具有服务器安装和事实上实现一个公平的项目数量上MSSQL和甲骨文。在这个问题,但是,我是只关注的访问及其并发问题,所以请不要建议数据库服务器。

谢谢你的帮助。

有帮助吗?

解决方案

这是一个老问题,但是没有人曾经实际的回答。这里的问题:

  1. 怎样同时进行读取处理MDB?
  2. 怎样同时进行更新/删除处理MDB?
  3. 是否有一个概念锁我怎么能利用其中的一个。净的应用程序?
  4. 是把MDB文件上的一个网络分享良好或可怕的想法?

第二个问题基本上可以回答一个解释。一个关键的告诫:答案我在这儿给特定喷多边开发银行(及其变体)并不完全适用于新文件的格式介绍开始A2007,即ACCDB格式。我还没有充分探讨所涉问题的清除喷通从ACE和一些评论如下可能承担的喷通下面罩。为很多事情,不过,你可以替代"LACCDB文件"为"LDB文件",其结果将相同。

1-2)并读入/更新/删除

喷气式数据库发动机是通常被称为"文件服务器"的数据库中,没有服务器的端恶魔管理I/O与数据服务器上的文件.这意味着,所有的客户使用的喷MDB正在阅读该文件。

这当然是一个灾难如果没有一些机制在处理同时访问该文件。

喷使用记录-锁定文件,在那里如果你的MDB"MyFile.MDB"的记录锁的文件将在同一文件夹和所谓的"MyFile.LDB".LDB文件记录是什么喷射通用户有MDB文件,打开什么工作站的用户连接,以及所有必要信息用于谈判并发问题。

现在,那些砍他们的牙齿上的客户/服务器的数据库引擎,这可能看起来原始的和危险的,但当时的喷数据库引擎的开发,其目的是要被用作一个桌面上的数据库引擎对于小型工作组,它是竞争与其他桌面数据库引擎像xBase和矛盾,两者都使用类似的锁定的文件管理并行使用的数据文件,从多个客户。

在一个喷射数据库文件、锁定应用上的数据页(其中喷气式4增加到4K,而在喷3.x及以前,他们2K),或在记录的水平,如果数据表最初创建于使用记录级锁定。在早期的喷4、记录级锁定被发现许多是相当缓慢,特别是在使用悲观锁,因此很多访问开发人员没有用任何东西,但页级锁定(@大卫*芬顿提出了手!).

事实上,当使用的乐观锁,可以避免大多数的并发问题,将带来悲观锁。

一些注意事项:

  1. 从道,记录级锁定可用,而且你永远只能获得页级锁定。

  2. 从道,有大量的选项,用于控制乐观/悲观锁,特别是列固有常量之参数的OpenRecordset的方法,但是,还与某些特定的的设置规定在OpenRecordset选项参数(例如,选择dbReadOnly不能用于列固有常量之).除了锁定的,也有选择符合/不一致的更新,并且所有这一切都可以进行互动与交易(例如,修改内uncomitted交易都不会看到其他的用户,因此不会与他们发生冲突,但它可以只读锁在桌子上的参与).

从ADO/OLEDB,这些喷并发控制结构要进行映射上的相关职能和论点,找到在ADO/OLEDB.因为我使用的喷仅从访问中,我与其进行交互仅通过道,所以我不能劝你如何控制这些与ADO/OLEDB,但有一点是,飞机数据库引擎,提供控制你的记录锁定时访问它编程方式(而不是通过访问UI)--这是更为复杂。

3)锁。净

我不能提供任何意见,在这里,其他比,你很可能使用OLEDB作为数据接口,但是,锁定功能/控制是存在的数据库引擎本身,所有可能的方式向控制它通过OLEDB.这可不漂亮,不过,因为它似乎对我OLEDB是设计周围的客户/服务器架构、和喷气式的基于文件的锁可不是地图上,在一个优雅的方式。

4)MDB网络共享

喷射非常敏感丝毫打嗝在任何网络连接。因此,低带宽网络能增加脆弱性的喷数据库的开放跨越一个缓慢的连接。

这是因为主要的块的数据库文件已经被拉跨线的地方计算机的内存处理。现在,许多人错误地声称,整个MDB文件是拉跨线,或者这整个表拉跨线。这是不正确的。相反,喷首先请求索引(和请求不超过必要的,以满足查询)和然后从这一结果确定确切的数据页面的需要,然后拉只有那些网页。这是令人惊奇地高效和快速的。

此外,喷气机不会一些非常聪明的高速缓存这可能意味着一个第一数据要求可能需要一段时间,但随后请求对于同样的数据发生的几乎瞬间的,因为缓存。

现在,如果你没有索引表,嗯,你最终可能会多达拉的整个表,做一个完整的表格的扫描。同样,如果基本标准对客户的侧职能不属的喷气式的SQL dialect,你可以拉一个完整的表(排序上说,代替(MyField,"A","Z")是可能会导致一个完整的表扫描)。但是,这种事情会是效率低下,与客户/服务器的结构,因此它只是常识性的架构设计以指标的事情的正确和谨慎使用Udf或非喷兼容的职能。在一般情况下,同样的东西,都是有效的,与客户/服务器都将是有效的喷(主要区别是,与喷你最好有一个持久连接,以便避免的开销重新LDB文件,该文件是显着)。

其他事情,以避免试图使用喷气式的数据在一个无线连接。我们都知道如何不可靠的无线,它只是自寻烦恼想与喷数据跨越一个无线连接。

底线:

如果你使用一个MDB作为数据存储服务数据从一个网页服务器,你应该把数据如接近网络服务器的RAM为可能。这意味着,如有可能,上一个盘卷,附理网络服务器。哪里这是不可能的,你想要一个快速、可靠的局域网连接。GB的局域网数据中心是很常见的这些天我会非常舒适的工作与喷射数据,这种连接。

对于共同使用,例如,多个客户机工作站运行VB.NET 桌面应用程序共用一个喷射MDB作为数据存储,这是很安全的数据文件上的一个可靠的文件服务器。在可能的,这是一个好主意要把你的喷MDB文件的机器上,并不是服务于多种用途(例如域控制器运行交流,SQL服务器,并作为文件服务器和打印服务器可能不是最好的位置)。等应用程序交换可能严重干扰文件服务器的功能,和我通常让你永远不会把MDB文件服务器上的多任务,作为交换服务器,除非这是极低的体积。

其他考虑因素:

  1. 永远不要试图分发MDB上复制文件系统,除非所有用户均使用相同的副本。也就是说,如果你有两个服务器复制文件之间,甚至不认为有关编辑MDB文件从两个服务器。这将损坏的文件几乎立即。

  2. 我建议对存储的任何MDB上的任何其他一个机Windows文件系统通过机Microsoft SMB网络。这意味着没有Novell,没有Linux,没有SAMBA。关键的原因是,有明显的低水平挂钩,从喷到了一些低级锁定功能,在Windows文件系统,该系统不是100%复制在其他文件systsm.现在,我非常保守的,并且许多主管访问开发商已报告的优异结果适当配置的Novell文件服务器(通常需要一些记录锁定进行调整,虽然可能不太相关的这些天里--我甚至不知道如果Novell存在任何更多的!), 和燃烧性能与基于Linux的文件服务器运行SAMBA。我很谨慎,在这个会议的任何客户的反对(这包括各种SAN设备,以及由于不是他们中的很多都基于Windows).

  3. 我将永远不会用他们在任何虚拟化的文件系统同样的原因。然而,我有个客户已经运行了她的单一用户接入的应用程序下的相似之处在Mac上空几年来现在没有一个单一的问题。但这是单用户,因此锁定问题都将是相对较小。

我不知道如果回答你的问题或者没有。这是所有基于我13年的经常使用的喷气作为一个访问开发人员和研究的唯一出版的一本书上的喷气机,喷气式数据库引擎的数据库程序的指导(喷气3.5)。我还没有提供任何真正的引文,但是如果有人需要的一些细节上的任何东西我已经说过,我会做这样的研究,如果我可以。

其他提示

我已经建立了十几个或所以小型企业应用程序访问了多年。最具有最大的10-20用户在他们的时间。该数据库是分裂之间"程序"和"数据"的数据库。性能是体面的,没有问题concurrancy.还腐败已经基本上不存在,因为进入2000年SP2。

有很多的人们说"永远不要使用访问"-好吧,如果这样做是正确的(即由一个专业开发人员)访问是一个相当精细的发展包,我已经有了一个良好的生活。我的客户非常满意我的建立。

我已经写入两个商业产品中,使用一个Access数据库,从运行一个网络共享,通常最多10名用户。如果你不滥用它,真的没有问题;但是你可以看到许多开发商不要到达那里-因为它的低端的性质,有很多糟糕的黑客建立在。在这种情况下的一个产物,我不得不重新设计应用程序,因为所有问题的详细描述了由他人;但之后,我清理了,我从来没有一个数据库的完整性问题跨越数以百计的设施。

它的一大优势是单一的文件数据库,这是很容易备份、恢复和复制到你的笔记本电脑来解剖.几乎所有的备选方案,包括源码(虽然一些不会承认这一点),需要某种形式的DBA关注。

在大多数情况下,访问提供的记录和文件锁对一些言(例如架构变化)的默认。

但是Microsoft基本上淘汰的,和你的一些同事将会堆的蔑视在你们对使用它。

(在这一点上,我通常鸭子复盖,并大喊"来!!!".)

访问确实是一个桌面上,单个用户的解决方案。在实践中,它具有上的用户限制"一"。

它也是一个地方发动机。也就是说,当你运行查询,数据是整个网络到当地的喷气发动机进行处理。一.ldb文件放在该网络共享控制锁。

如果您使用的服务器侧发动机(MSSQL,MySQL、Sybase、'Orable等),然后提交的查询到的一个引擎进程和返回的结果。锁都举行了内部。

这种具有巨大影响性、稳定性及数据的完整性。

如果你用户决定按重置按钮,访问数据库具有公平的机会被损坏,只有删除。ldb。

有一个适当的数据库引擎的数据库(数据库、Sybase、'Orable:我不喜欢MySQL的备份)然后,你还有一个适当的备份功能。除非你有一些whizzy软件的备份,使用的文件,它是可能的,你就没有备份的数据,在访问的数据库。

我所提到的锁,特别是因为一数据库引擎可以处理并发和交易更有效地和优雅的超过任何基于文件的系统。

我可以看到用一个Access项目作为一个前端,一数据库引擎,而不是投资在一个完整的客户应用程序的访问的后端。

我已经使用的访问,或者更确切地说,喷作为后端在一个很小,私人网站,可以永远长不大,因为它是有限的,大小的行业,在这个小国。在三年来,我没有任何问题。还有不到100个用户,大约有三十到四十使用它的每一天。表有几千记录。

我没有多少经验的访问,但该链接可能是有用的:

http://office.microsoft.com/en-us/access/HP052408601033.aspx

"你可以把整个访问数据库在网络服务器上或在共享文件夹。这是最简单的方法来实施。每个人共享的数据,并使用同样的形式、报告、查询、宏和模块。使用这种策略如果你想要每个人使用的Access数据库中相同的方式,或者如果你可以不支持用户创造他们自己的对象。"

"当你打开一个Access数据库文件(.mdb)在共享模式,Microsoft Access还创建了一个锁定的信息文件(.ldb)与同一文件的名称(例如,罗斯文。ldb),并在同一文件夹中的数据库文件。这个锁定的信息文件存储在计算机名称(如mypc)和安全的名称(如管理)中的每一个共同的用户的数据库。Microsoft Access使用这些信息的控制并发。在大多数情况下,Microsoft Access自动删除该锁定信息的文件时的最后一个用户关闭的数据库文件。"

访问是应该多用户-我认为Microsoft建议它对高达4或5个用户,但在实践中,我建议,你永远不会使用一个Access数据库,那里有超过一个单一的用户,虽然如果你真的没有选择,这是可以接受为两个或三个,给予一定的条件.

我有经验的四个或五个系统使用一个Access数据库的后结束所有从获得的其他"开发人员"--在所有情况下我们移到SQL服务器作为一个优先权之后的任何即时更新和修订时,需要考虑的合同一般作为只要我能帮你老板付账到它。时间跨度通常是几个月,所以我已经看到它的运行并行的一个合理的时间长度在几个不同的应用。

实际上,它将通常作灵敏的如果系统没有很多并发插入/更新而不是大量使用。首席的实际问题在我的经验是..

  1. 这是易于腐败,它只是一样。一般来说,这并不太多的一个问题,因为开放的文件和运行紧凑的,并修复将整理出的问题,而是一个良好的备份制度是绝对必要的。

  2. 这是缓慢的。每次我已经升级系统到SQL服务器我收到一个很大的荣誉,为加快该系统的用户。

  3. 该数据库文件膨胀的方式,因为这一访问记录进行更新或删除。这进一步减缓该系统作为该文件已被载入全网络。因此一些制度,压缩的数据,通常是在每天的基础上,是至关重要的。

所有上述要少得多的一个问题,与单个用户系统为基础的问题,提示这些都是更为突出。

所有在我必须强调的是,我不会推荐获任何多用户系统。然而,如果真的太可能你会得到它如此长的,因为它是一个轻易使用的应用程序和你做研究所的备份和维护过程。

它已经指出的若干次使用一个真正的多用户免费数据库的平台。但其中一个原因为什么没有说明。这个原因,有多少现有的、混乱的,麻烦,大访问的数据库已开始了作为"一些记录时,一个或两个用户最大"?我敢说他们所有人。

除非只有两个或三个员工在整个公司的可能性是,如果开发一个有用的软件,这将最终被用超过原来的两个或三个用户,比原来的数千记录,并将扩大多年来为包括多种形式,许多表格,以及更多的数据。你不可能恢复的基础的一套房子一旦房子的建造。建立一个坚实的基础,今天,你可以扩大的房子你的心脏的内容。同一软件。

当一个网络分享我会去一个网络启用数据库(mysql/火鸟/mssql),而不是访问。

对于你的情况描述使用不是一个问题。

我已经使用访问中更具有挑战性的情况下,那么这主要是工作时与网站访问时不受虐待,无法衡量这真的不是那么糟糕的一数据库引擎。(不是在谈论的形式和类似的东西只是表和记录)

当你做插入/更新/删除从几个用户,在一次然后就变得有点毛。这是你从哪里开始考虑真实的数据库引擎。

还当你想要一个较低的开销数据库,该数据库的线的安全你可以看看vistadb(慢然后访问,并不总是免费的,为100%。NET)

我认为访问的用途表级锁定与某种queeing机构的事情应该确定。如果你担心你总是可以扔掉一个模拟的压力测试。

我认为你可以界定它在你的.网应用程序连串。我用google搜索,用于喷气、访问和记录锁定

这里有一个 链接 这可能会有帮助。

请见所接受的答案真的详细信息关于如何访问和喷气式获得数据。

请不要使用一个多用户的情况。

我刚刚通过了两个星期的痛苦,因为我predeccessor上的一个项目,选择了访问作为后端。

具体原因:

  • 没有这样的东西作为皇宫访问
  • 访问有很多的怪癖样依赖以外的参数以命令将你年龄要调试
  • 访问不会
  • 数据库的更新是一个苦差事的时候相比,使用SQL服务器
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top