Ошибки при массовой загрузке CouchDB
-
22-07-2019 - |
Вопрос
У меня есть около 15 тысяч строк в MSSQL 2005, которые я хочу перенести в CouchDB, где одна строка — это один документ.У меня есть CLR-UDF, который пишет н строки в привязанный к схеме XML-файл.У меня есть преобразование XSL, которое преобразует привязанный к схеме XML в JSON.
Я думаю, что с помощью этих существующих инструментов я смогу перейти от MSSQL к XML и JSON.Если я пакетирую н строк в файле JSON, я могу написать сценарий cURL для циклического перебора файлов и отправить их в CouchDB с помощью массового API. _bulk_docs
.
Будет ли это работать?Кто-нибудь делал подобную миграцию раньше?Можете ли вы порекомендовать лучший способ?
Решение
На данный момент я выполнил некоторые преобразования из устаревших баз данных SQL в CouchDB.У меня всегда был несколько иной подход.
- Я использовал первичный ключ SQL-DB в качестве идентификатора документа.Это позволило мне импортировать снова и снова, не опасаясь дублирования документов.
- Я выполнил импорт построчно вместо массового импорта.Это упрощает отладку.Я видел 5-10 вставок в секунду при подключении к Интернету.Хоть это и не молниеносно, для меня этого оказалось достаточно.Моя самая большая база данных — 600 000 документов общим объемом 20 ГБ.строка за строкой раздувает базу данных во время импорта, поэтому время от времени запускайте сжатие.Опять же, если ваши строки не огромны, 15 000 строк — это не так уж и много.
Мой код импорта обычно выглядит так:
def main():
options = parse_commandline()
server = couchdb.client.Server(options.couch)
db = server[options.db]
for kdnnr in get_kundennumemrs():
data = vars(get_kunde(kdnnr))
doc = {'name1': data.get('name1', ''),
'strasse': data.get('strasse', ''),
'plz': data.get('plz', ''), 'ort': data.get('ort', ''),
'tel': data.get('tel', ''), 'kundennr': data.get('kundennr', '')}
# update existing doc or insert a new one
newdoc = db.get(kdnnr, {})
newdoc.update(doc)
if newdoc != db.get(kdnnr, {}):
db[kdnnr] = newdoc