Эффективный способ хранения строки JSON в столбце Cassandra?

Кассандра вопрос новичка. Я собираю некоторые данные с сайта социальной сети, используя звонки REST. Таким образом, я получаю данные в формате JSON. JSON-это только один из столбцов в моей таблице. Я пытаюсь выяснить, что такое "лучшая практика" для хранения строки JSON. Сначала я подумал об использовании карта type, но JSON содержит сочетание строк, числовых типов и т. д. Не похоже, что я могу объявить типы подстановочных знаков для ключа/Значения карты. формат JSON строка может быть довольно большой, вероятно, более 10KB в размере. Я мог бы потенциально сохранить его как строку, но, похоже, это было бы неэффективно. Я предполагаю, что это общая задача, поэтому я уверен, что есть некоторые общие рекомендации, как это сделать. Я знаю, что у Cassandra есть встроенная поддержка JSON, но из того, что я понимаю, это в основном используется, когда вся карта JSON соответствует 1-1 со схемой базы данных. Это не для меня. Схема имеет кучу столбцов, а строка JSON - это просто сортировка "полезной нагрузки". Лучше ли хранить строку JSON как blob или как "текст"? Кстати, версия Cassandra-2.1.5. Любые намеки оценены. Спасибо заранее.

2 ответов


в движке хранения Cassandra действительно нет большой разницы между blob и текстом, так как Cassandra хранит текст как blobs по существу. И Да," родная " поддержка JSON, о которой вы говорите, предназначена только для того, когда ваша модель данных соответствует вашей модели JSON, и это только в Cassandra 2.2+.

Я бы сохранил его как текстовый тип, и вам не нужно ничего реализовывать, чтобы сжать данные JSON при отправке данных (или обрабатывать распаковку). С двоичного протокола Кассандры поддерживает делаю сжатие транспорта. Также убедитесь, что в вашей таблице хранится сжатие данных С тем же алгоритмом сжатия (я предлагаю использовать LZ4, так как это самый быстрый Algo implmeneted), чтобы сэкономить на сжатии для каждого запроса на чтение. Таким образом, если вы настраиваете хранение сжатых данных и используете сжатие транспорта, вам даже не нужно реализовывать ни то, ни другое.

вы не сказали, Какой клиентский драйвер вы используете, но вот документация по настройке сжатия транспорта для Драйвер Java-Клиента Datastax.


Это зависит от того, как вы хотите запросить свой JSON. Существует 3 возможных стратегии:

  1. хранить в виде строки
  2. хранить как сжатый blob
  3. хранить как blob

опция 1 имеет то преимущество, что читается человеком при запросе данных в командной строке с помощью cqlsh или если вы хотите отлаживать данные непосредственно в реальном времени. Недостатком является размер этого столбца JSON (10k)

Вариант 2 имеет преимущество к держите полезную нагрузку JSON небольшой, потому что текстовые элементы имеют довольно приличный коэффициент сжатия. Недостатками являются: a. вам нужно позаботиться о стороне клиента сжатия / декомпрессии и b. это не читается человеком напрямую

Вариант 3 имеет недостатки варианта 1 (размер) и 2 (не читается человеком)