两个数据库即时比较数据...需要实施建议

时间:2011-09-10 11:32:01

标签: android performance data-structures

所以我希望比较两个数据库,一个是只读的,另一个是通过添加只读的数据来更新自己,并删除只读数据库没有的数据库。基本上是数据的同步。

此时我有两个包含数据的游标(其中一个我转换为arraylist),每个游标用于比较键。这是样本。我觉得我应该正好相反,就像搜索只读而不是循环只读并搜索arraylist中的每个项目一样。我希望有一些形式或光标比较,以使这更快,更可靠。有什么想法或建议吗?

ArrayList<String> addImg = new ArrayList<String>();
ArrayList<String> delImg = new ArrayList<String>();
image_store = m_db.getAllImages();
// this returns an arraylist of strings(can also change to return a cursor)
local_images = img_db.getAllImages();

image_store.moveToFirst();
while(!image_store.isAfterLast()) {
    key = image_store.getString(image_store.getColumnIndexOrThrow("name"));
    // check if stored locally, if not add it to array.
    if(Arrays.binarySearch(local_images, key) == -1) {
        addImg.add( image_store.getString(image_store.getColumnIndexOrThrow("name")));
    } else {
        delImg.add(key);
    }
    image_store.moveToNext();
}
if( !addImg.isEmpty() ) {
    // this will loop through and delete from a cursor generated on another query
    addImages(addImg);
}
if( !delImg.isEmpty() ) {
    // this will loop through and delete from a cursor generated on another query
    delImages(addImg);
}

1 个答案:

答案 0 :(得分:0)

这取决于您在每个数据库中保留的图像索引的顺序。

最好的情况是,如果您将它们保留在某种数字或词典顺序中。 然后一个简单的O(N)合并算法就可以完成这项工作。

你是按照相同的顺序保留它们,而不是字典吗? 然后,您可以使用diff-style算法来查看需要保留,删除或添加的图像。

如果你没有按任何顺序对它们编制索引,那么你几乎坚持使用O(N ^ 2)或O(NlogN)方法。