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

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

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


person Paul    schedule 26.12.2009    source источник
comment
Я почти уверен, что CouchDB может обрабатывать документы размером более 2 МБ - первый Google ссылается на ограничение в 4 ГБ. Или вы имеете в виду, что не думаете, что он может обрабатывать 2 МБ x 30 000?   -  person John Carter    schedule 26.12.2009
comment
столько беспочвенных домыслов ...   -  person just somebody    schedule 26.12.2009
comment
отсюда: Нет, я имел в виду, что 2 МБ - это массив JSON из 30 тыс. элементов. Вы уверены насчет ограничения в 4 ГБ? Этот парень говорит, что это 1 МБ: stackoverflow.com/questions/28975/anyone -using-couchdb /   -  person Paul    schedule 26.12.2009
comment
Подождите, пока SQL Server 2016 ... blogs.msdn.microsoft.com/jocapc/2015/05/16/   -  person N West    schedule 10.03.2016


Ответы (3)


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

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

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

person Traveling Tech Guy    schedule 26.12.2009

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

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

person mikeal    schedule 27.12.2009

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

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

person Philip Reynolds    schedule 26.12.2009
comment
Да, довольно часто мне придется обслуживать весь документ, а иногда придется обновлять отдельные элементы в документе JSON. Я предполагаю, что кеширование на диск, а затем внесение изменений в ОЗУ - это то, что нужно. - person Paul; 26.12.2009