Две базы данных, сравнивающие данные на лету ... Нужен совет по реализации - PullRequest
0 голосов
/ 10 сентября 2011

Итак, я собираюсь сравнить две базы данных: одну, предназначенную только для чтения, и другую, которая будет обновляться, добавляя то, что есть только для чтения, и удаляя то, чего нет в базе только для чтения. По сути, синхронизация данных.

На данный момент у меня есть два курсора, содержащие данные (один из которых я преобразовал в 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 голосов
/ 10 сентября 2011

Это зависит от порядка индекса изображения, которое вы храните в каждой базе данных.

Наилучшая ситуация будет, если вы будете хранить их в каком-либо числовом или лексикографическом порядке. Тогда простой O (N) алгоритм слияния сделает эту работу.

Вы держите их в том же порядке, но не в лексикографическом? Затем вы можете использовать алгоритм в стиле diff, чтобы увидеть, какие изображения необходимо сохранить, удалить или добавить.

Если вы не ведете их в индексированном порядке, то вы в значительной степени застряли с подходом O (N ^ 2) или O (NlogN).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...