Java 如何解决数据冲突

Java 如何解决数据冲突,java,php,database,database-design,Java,Php,Database,Database Design,我有几个数据库,需要在它们之间交换数据。当我从db A导入导出到db B时,会发生Id冲突。我想出了两个办法,没有人能让我满意 选择max(id),然后创建新id以避免冲突,但一列存储json结构并包含id!(历史原因)。所以我需要创建新Id(主键)并修改json列中的所有Id 或者,我可以为每次数据导入添加批次信息。导入数据时,我会找出sql中的每个id,并在它们之前添加批处理id。例如: 原始数据库类似于: ID COL_JSON 11 {id:11,name:xx ...}

我有几个数据库,需要在它们之间交换数据。当我从db A导入导出到db B时,会发生Id冲突。我想出了两个办法,没有人能让我满意

  • 选择max(id),然后创建新id以避免冲突,但一列存储json结构并包含id!(历史原因)。所以我需要创建新Id(主键)并修改json列中的所有Id

  • 或者,我可以为每次数据导入添加批次信息。导入数据时,我会找出sql中的每个id,并在它们之前添加批处理id。例如:

  • 原始数据库类似于:

    ID     COL_JSON
    11     {id:11,name:xx ...} 
    
    我想插入一条新记录:11,在插入后,我在id之前添加一个批次信息“1000”

    现在db看起来像

    ID     COL_JSON
    11     {id:11,name:xx ...}  
    100011 {id:100011,name:xx ...}  
    
    ID     COL_JSON
    11     {id:11,name:xx ...}  
    100011 {id:100011,name:xx ...}  
    100111 {id:100111,name:xx ...}  
    
    下一批将是10011002 1003…,因此,如果需要插入新的11记录,db如下所示

    ID     COL_JSON
    11     {id:11,name:xx ...}  
    100011 {id:100011,name:xx ...}  
    
    ID     COL_JSON
    11     {id:11,name:xx ...}  
    100011 {id:100011,name:xx ...}  
    100111 {id:100111,name:xx ...}  
    

    虽然这两种方法可以解决冲突,但我觉得这两种方法很愚蠢。有什么好办法吗?

    我不太明白你们的数据库交换什么

    如果您需要两个数据库中的数据,您可以使用与批处理类似的内容,但使用字符-A11和B11 ID

    这样,即使数据库大量增长,也不会发生冲突


    编辑:您还可以使用两个字段创建主键:带autoincrement的整数ID和用于原始数据库名称的varchar。

    当我有一个应该同步的表(不是动态的)时,我使用这种方法:

    • 将被覆盖的主表具有较大的自动增量(即:自动增量=100000)
    • 将合并到主表的次表具有从1开始的正常自动增量

    唯一的要求是确保主表具有足够大的自动存储设置,因此次表id永远不会到达主表第一个id

    对于传统系统,除了与之对齐之外,没有更好的方法。我们无法在遗留系统上进行更多更改,所以您的第2种方法看起来不错。坦白地说,tt并不愚蠢,而且是正确的方法。

    您是在谈论数据库同步方法吗?不是同步问题。我从应用程序A的数据库和一些文件中导出数据,然后导入到应用程序B(数据库和文件),感谢Regerok。我的问题不仅仅是主键冲突