Недостатки хранения бинарных данных в Riak?

Каковы проблемы с хранением бинарных данных в Riak?

Влияет ли это на ремонтопригодность и производительность кластеризации?

Какова будет разница в производительности между использованием Riak для этого, а не распределенной файловой системой?


person mikeal    schedule 23.05.2011    source источник


Ответы (5)


В дополнение к отличному ответу @Oscar-Godson вы, вероятно, столкнетесь с проблемами со значениями, намного превышающими 50 МБ. Bitcask лучше всего подходит для значений до нескольких КБ. Если вы храните большие значения, вы можете рассмотреть альтернативные механизмы хранения, такие как innostore .

У меня нет опыта хранения двоичных значений, но у нас есть кластер среднего размера в производстве (5 узлов, порядка 100 миллионов значений, 10 ТБ), и мы наблюдаем частые ошибки, связанные с вставкой и извлечением значений. которые имеют размер 100 КБ. Производительность в этом случае непостоянна — в одних случаях она работает, в других — нет, поэтому, если вы собираетесь тестировать, тестируйте в масштабе.

Мы также наблюдаем проблемы с большими значениями при выполнении запросов на уменьшение карты — они просто истекают по тайм-ауту. Однако это может быть менее актуально для двоичных значений... (как упоминал @Matt-Ranney).

Также см. ответ @Stephen-C здесь

person Elad    schedule 23.05.2011
comment
Привет, Бен. У вас не должно быть проблем с производительностью с объектами размером менее 1 МБ. Если вы хотите предоставить информацию о своем кластере в список рассылки riak-users, один из нас, Bashos, может помочь в диагностике. Убедитесь, что вы настроили свою систему в соответствии с рекомендациями в документации. - person Luke Bakken; 19.04.2016

Единственная проблема, о которой я могу думать, - это хранение двоичных данных размером более 50 МБ, против чего они не рекомендуют. Весь смысл Riak именно в этом:

Еще одна причина, по которой можно выбрать Riak, заключается в гибкости моделирования ваших данных. Riak будет хранить любые данные, которые вы ему укажете, независимо от содержимого — он не обеспечивает соблюдение таблиц, столбцов или ссылочной целостности. Это означает, что вы можете хранить двоичные файлы вместе с более прозрачными для программиста форматами, такими как JSON или XML.

Источник: Дизайн схемы в Riak — Введение

person Oscar Godson    schedule 23.05.2011
comment
Обратите внимание, что проблема ~50 МБ вызвана жестко заданными ограничениями размера буферов сетевого распределения Erlang, а не чем-либо в Riak. - person seancribbs; 24.05.2011
comment
Есть ли причина, по которой он используется по умолчанию для Erlang? Просто лучшая практика, или это вызывает проблемы с производительностью? - person Oscar Godson; 24.05.2011

В Riak рекомендуемый максимум составляет 2 МБ на объект. Кроме того, рекомендуется использовать либо Riak CS, который был протестирован с объектами размером до 5 ТБ (хранятся в Riak как объекты размером 1 МБ), либо путем естественного разбиения вашего большого объекта на фрагменты по 2 МБ и связывания по ключу и суффиксу.

person Richard Shaw    schedule 16.11.2013

Я лично не заметил никаких проблем с хранением данных, таких как изображения и документы (как DOC, так и PDF), в Riak. У меня нет показателей производительности, но, возможно, я смогу их собрать, если вспомню.

Следует отметить, что с Riak вы можете использовать Luwak, который предоставляет API для хранения больших файлов. Это было очень полезно.

person Nick Campbell    schedule 23.05.2011
comment
Распространяет ли luwak вместе с остальными данными в Riak? - person mikeal; 24.05.2011
comment
Кроме того, доступен ли luwak через HTTP API? все, что я вижу, это API erlang. - person mikeal; 24.05.2011
comment
AFAIK Luwak — это просто слой поверх Riak, он обрабатывает фрагментацию данных за вас. Все остальное — обычное дело для Riak. - person Nick Campbell; 24.05.2011
comment
Я использую Luwak через RiakJS, который поддерживается (по крайней мере, в RiakJS) только через HTTP API. - person Nick Campbell; 24.05.2011
comment
У Luwak есть HTTP API, и он распределяет данные по кластеру. wiki.basho.com/Luwak.html - person Matt Ranney; 24.05.2011

Одна из проблем может заключаться в том, что сложно, если вообще возможно, использовать JavaScript map/reduce для ваших двоичных данных. Для этого вам, вероятно, понадобится Erlang.

person Matt Ranney    schedule 23.05.2011
comment
в CouchDB есть отдельный API для хранения бинарных данных (вложений) специально для этого случая. только метаданные о вложениях позволяют отображать/уменьшать. - person mikeal; 24.05.2011
comment
Проверьте ссылки Riak. Вы можете иметь один объект, метаданные которого подходят для m/r, а затем добавить ссылку на необязательный двоичный объект. - person Matt Ranney; 24.05.2011
comment
Как ссылки могут удерживать другой связанный объект вне карты/уменьшения? - person mikeal; 24.05.2011
comment
Вы можете отфильтровать ссылки, которые вы включаете, на основе тегов — см. http://wiki.basho.com/Links-and-Link-Walking.html - person Nick Campbell; 24.05.2011