Как лучше всего хранить большой документ JSON (2+ МБ) в базе данных? - PullRequest
2 голосов
/ 26 декабря 2009

Каков наилучший способ хранения больших файлов JSON в базе данных? Я знаю о CouchDB, но я почти уверен, что он не будет поддерживать файлы того размера, который я буду использовать.

Я не хочу просто читать их с диска из-за времени, необходимого для их чтения и обновления. Файл представляет собой массив из ~ 30 000 элементов, поэтому я думаю, что хранение каждого элемента отдельно в традиционной базе данных убьет меня, когда я попытаюсь выбрать их все.

Ответы [ 3 ]

3 голосов
/ 27 декабря 2009

У меня есть много документов в CouchDB, которые превышают 2 мегабайта, и они отлично справляются с ними. Эти ограничения устарели.

Единственное предостережение в том, что сервер представлений javascript по умолчанию имеет довольно медленный синтаксический анализатор JSON, поэтому генерация представлений может занять некоторое время с большими документами. Вы можете использовать мой сервер представлений Python с библиотекой JSON на основе C (jsonlib2, simplejson, yajl) или использовать встроенные представления erlang, которые даже не затрагивают сериализацию JSON, и генерация представлений будет довольно быстрой. *

2 голосов
/ 26 декабря 2009

Если вы намереваетесь получить доступ к определенным элементам по одному (или нескольким) за раз, невозможно разбить большой JSON на традиционные строки и столбцы БД.

Если вы хотите получить к нему доступ за один раз, вы можете преобразовать его в XML и сохранить его в БД (возможно, даже в сжатом виде - XML ​​с высокой степенью сжатия). Большинство механизмов БД поддерживают хранение объекта XML. Затем вы можете прочитать его за один раз и, при необходимости, перевести обратно в JSON, используя подходы прямого чтения, такие как SAX, или любую другую эффективную технологию чтения XML.

Но, как прокомментировал @therefromhere, вы всегда можете сохранить его как одну большую строку (я бы снова проверил, усиливает ли это сжатие).

1 голос
/ 26 декабря 2009

Здесь у вас нет большого выбора, вы можете кешировать их в оперативной памяти, используя что-то вроде memcached, или отправлять их на чтение с диска и записывать их в базу данных (СУБД, например, PostgreSQL / MySQL, или DOD, например, CouchDB) , Единственная реальная альтернатива этому - гибридная система кеширования наиболее часто используемых документов в memcached для чтения, как работает множество сайтов.

2 + МБ - не такая уж большая проблема с базой данных, и, если у вас достаточно ОЗУ, они сделают достаточно умную работу по кешированию и эффективному использованию вашей ОЗУ. У вас есть периодичность, когда и как часто к этим документам обращаются и как вы должны обслуживать пользователей?

...