我前一段时间使用API,以使存储在两个不同系统中的记录彼此保持同步。它一直运行良好,但是遇到了我要同步的新表的问题,该表有大量记录。以下是基本前提。
table1和table2是一片结构,反映了我试图保持同步的数据。这对于大约20,000条记录可以正常工作。但是我现在正在使用200,000,这并不是很有效,因为我实际上有效地遍历了每一行200,000次,这导致数十亿次循环。有没有更有效的方法来实现这一目标?
for _, item1 = range table1 {
for _, item2 = range table2 {
if item1.id == item2.id {
itemsAreEqual = reflect.DeepEqual(item1, item2)
if !itemsAreEqual {
//Update Stuff
}
}
}
}
如果表中元素的顺序不重要,请改用两个映射:
for id1, item1:=range table1 {
if item2, ok:=table2[id1]; ok {
...
}
}
如果需要更新item1
和item2
成员,最好将这些映射设置为map[idType]*Item
而不是map[idType]Item
。
如果顺序很重要,则可以对数组加映射执行相同的操作:
ids:=make(map[idType]*Item)
for i,item:=range table2 {
ids[item.id]=&table2[i]
}
for id1, item1:=range table1 {
if item2, ok:=ids[id1]; ok {
...
}
}