【问题标题】:Best approach regarding to get least amount of lock time when reading/writing to access DB在读/写访问数据库时获得最少锁定时间的最佳方法
【发布时间】:2012-11-27 10:01:05
【问题描述】:

我有一个项目,我要将 MS Access DB 与 MySQL DB 同步,我想知道从/向 MS Access DB 读取/写入的最佳方法,因为它会在我执行此操作时锁定 DB。 (会有其他应用程序读取/写入同一个 Access DB,所以我想尽量减少锁定它的时间)。

我选择的语言会有所不同吗?我最习惯使用 C# 和 .NET 编写应用程序。

有没有比这更有经验的人提供建议/经验?

【问题讨论】:

  • Access db和MySQL之间的同步是一种方式吗?
  • 你不能只复制访问数据库并从副本同步吗?无论如何,您将如何处理同步期间发生的更改?
  • 同步将是双向的,如果这是避免同步期间任何更改的最佳方式,我可以复制访问数据库,但我会从中选择 *,然后离线处理数据会会更好?访问数据库的大小只有 3-10MB,所以它不是很大
  • 同步的本质是什么?将整个记录复制到/从任一数据库?基于行 ID?或者更新现有行中的字段?如果要更新行,则可以进行行级锁定。您也可以一次添加一小组记录。一种方法是在两种环境中使用更改的记录创建游标/记录集,并以小增量更新目标表,每次迭代仅几条记录。
  • 这应该是实时同步,例如 SQL Server 复制 (msdn.microsoft.com/en-us/library/ms151198.aspx)?

标签: c# .net ms-access


【解决方案1】:

将您的应用程序将专门用于查找目的的查询存储在 Access DB 中,并在查询属性中存储为 ReadOnly。然后让您的应用程序查询那些 ReadOnly 查询,这将防止不必要的锁定。

在应用程序中保持更新和插入 SQL 语句的简短和简单也会在一定程度上限制锁定时间。

【讨论】:

    【解决方案2】:

    我认为语言并不重要 - 您可以在 .NET 环境中使用 C# 或 VB。您是否计划对两个数据库进行实时同步或非工作时间(比如说每天)同步?

    同步的一种方法是将表的数据转储到文本文件,将它们加载到正确索引的表中,然后查找更新的记录(使用数据访问查询)并查找新记录(使用外连接)并将它们附加到数据存储区。

    【讨论】:

      【解决方案3】:
      1. 如果您的表不包含主键。添加一个,我们将其命名为“Id”

      2. 创建表“sync_log”来存储更改。

        • 一列用于“SQL”以应用于目标数据库。
        • 此“SQL”执行状态的一列。 (待定,已完成)
        • 此“SQL”的时间一列,然后您可以按原始顺序将 SQL 应用到目标数据库。
      3. 为创建、更新、删除创建触发器

        箱子: 创建一行时,您的触发器会将以下行插入另一个表“sync_log”

        "INSERT into table T values(CA, CB, CC, CD)"

        删除: 创建一行时,您的触发器会将以下行插入另一个表“sync_log”

        "从 Id = 99 的表 T 中删除"

        update:类似,也是通过主键“Id”识别目标行

      4. 让您的应用轮询表“sync_log”,将新的“待处理”SQL 应用到目标数据库,然后将“sync_log”中的 SQL 状态更新为“已完成”。

      这是一种方式同步,另一种方式同步类似。

      如果(您正在使用 Microsoft Access 项目) 然后 {http://office.microsoft.com/en-au/access-help/create-a-trigger-adp-HP003085415.aspx } 别的 { 访问宏事件类似于触发器。 http://blogs.office.com/b/microsoft-access/archive/2009/08/13/access-2010-data-macros-similar-to-triggers.aspx }

      【讨论】:

        猜你喜欢
        • 2023-03-24
        • 1970-01-01
        • 2011-01-21
        • 2011-02-24
        • 1970-01-01
        • 2016-04-29
        • 2012-03-18
        • 2012-05-12
        • 1970-01-01
        相关资源
        最近更新 更多