根据我的理解,如果我错了,请纠正我,无论我是否使用odbc,当访问存储在另一台计算机(即NAS)上的MS Access数据库(*.mdb)时,我的计算机首先需要在对其执行任何操作之前加载完整的 *.mdb 文件,无论这些操作多么简单。
您错了。整个 .mdb(或 .accdb)文件将not当数据库打开时通过网络拉取。如果可以使用索引来识别相关行,那么即使对特定表进行操作也不一定会通过网络拉取整个表。对于使用 Wireshark 执行的实际测量,请参阅我的答案here.
文件多久保存回存储(即 NAS)?是否有某种“空闲”超时或类似的情况?我正在尝试计算较大文件产生的网络流量。
Access 数据库引擎可能会在提交更新之前将更新缓冲几秒钟。这样做可能是为了减少数据库文件的争用。当有更新的时候are提交后,Access 数据库引擎仅通过网络发回修改后的页面;它不会重写整个表(或文件)。
一个用户多久可以看到另一个用户对同一文件所做的更改?
我不久前运行了一些测试,发现一个用户(连接)所做的更改通常在大约五 (5) 秒后可用于其他连接。看我的回答here了解详情。
这种文件访问如何在多用户环境中工作而不不断导致数据损坏?
每个用户都有自己的 Access 数据库引擎实例来操作共享数据库文件,但各个实例相互协作来管理记录/页面锁定。请注意,当在“共享模式”下打开 Access 数据库文件(.accdb 或 .mdb)时,会在同一文件夹中创建锁定文件(.laccdb 或 .ldb)。 Access 数据库引擎的各个实例使用此锁定文件来管理多用户访问。
示例:网络流量
我刚刚使用 Wireshark 捕获使用 ODBC 运行的 VBScript 生成的网络流量
SELECT COUNT(*) AS n FROM TestData WHERE ID=1
针对驻留在网络共享上的 84.3 MB Access 数据库文件。该文件由一 (1) 个表组成,该表包含一百万 (1,000,000) 行,并以长整型 [ID] 字段作为其主键。
产生的总网络流量
- 打开到数据库文件的 ODBC 连接,
- 运行查询,
- 返回结果,并且
- 关闭连接
为 110 KB。