Объединить две базы данных TinyDB - PullRequest
0 голосов
/ 04 ноября 2018

В Python я пытаюсь объединить несколько файлов JSON, полученных из TinyDB.

Мне не удалось найти способ прямого объединения двух файлов JSON tinydb, ключи которых были автоматически сгенерированы в той последовательности, которая не перезапускается при открытии следующего файла.

В кодовых словах я хочу объединить большое количество данных, таких как:

 hello1={"1":"bye",2:"good"....,"20000":"goodbye"}    

    hello2={"1":"dog",2:"cat"....,"15000":"monkey"}

Как:

Hello3= {"1":"bye",2:"good"....,"20000":"goodbye","20001":"dog",20002:"cat"....,"35000":"monkey"}

Из-за проблемы с поиском правильного способа сделать это с TinyDB я открыл и преобразовал их просто в файл json с классическим синтаксисом, загрузив каждый файл и выполнив:

Data = Data['_default']

Проблема, с которой я столкнулся, заключается в том, что на данный момент код работает, но у него серьезные проблемы с памятью. Через несколько секунд созданная объединенная база данных содержит примерно 28 МБ данных, но (вероятно) кэш насыщается, и он начинает добавлять все остальные данные очень медленно.

Итак, мне нужно очистить кеш после определенного количества данных, или, возможно, мне нужно изменить способ сделать это!

Это код, который я использую:

Try1.purge()
Try1 = TinyDB('FullDB.json')

with open('FirstDataBase.json') as Part1 :
     Datapart1 = json.load(Part1)
     Datapart1 = Datapart1['_default']

     for dets in range(1, len(Datapart1)):

         Try1.insert(Datapart1[str(dets)])


with open('SecondDatabase.json') as Part2:
     Datapart2 = json.load(Part2)
     Datapart2 = Datapart2['_default']

     for dets in range(1, len(Datapart2)):

         Try1.insert(Datapart2[str(dets)])

1 Ответ

0 голосов
/ 04 ноября 2018

Вопрос : Объединить две базы данных TinyDB ... возможно, мне нужно изменить способ сделать это!


С Документация TinyDB
Почему бы не использовать TinyDB?
...
Вы действительно обеспокоены производительностью и вам нужна высокоскоростная база данных.

Вставка одной строки в БД всегда медленная, попробуйте db.insert_multiple(....
Второй. с generator. дает возможность удерживать объем памяти.

# From list
Try1.insert_multiple([{"1":"bye",2:"good"....,"20000":"goodbye"}])

или

# From generator function
Try1.insert_multiple(generator())
...