Как серверная часть хранилища влияет на Datomic?

Как выбрать серверное хранилище для Datomic?

Является ли выбор, скажем, DynamoDB вместо Postgres вопросом предпочтения, или у каждого варианта есть свои компромиссы? Если так, то кто они?


person konr    schedule 29.07.2013    source источник
comment
Почему этот вопрос помечен? Мне это кажется вполне разумным   -  person monch1962    schedule 29.07.2013
comment
@monch1962 monch1962, если это так, то вы можете компенсировать это, проголосовав за него!   -  person Alex D    schedule 29.07.2013
comment
@Alex D - уже сделано!   -  person monch1962    schedule 30.07.2013


Ответы (1)


Требования к службам хранения

Службы хранения данных Datomic обычно должны соответствовать трем требованиям:

  1. Реализуйте семантику хранилища ключей и значений: эффективный доступ для чтения/записи с использованием значений индексированных ключей.
  2. Поддерживайте согласованное чтение. например читайте свои собственные записи. В идеале чтение без конфликтов/блокировок.
  3. Поддержка условных путов. например оптимистическая блокировка + изоляция моментальных снимков.

Datomic использует службы хранения для хранения блоков отсортированных сжатых данных, аналогично тому, как традиционные системы баз данных используют файловые системы, и приведенные выше требования в значительной степени представляют собой API между базовой службой хранения и Datomic. Таким образом, выбор служб хранения данных зависит от насколько хорошо они соответствуют этим трем требованиям.

Запись Масштабируемость

Datomic обычно не оказывает большого давления на базовую службу хранения, так как в нее записывает только один компонент — Transactor. Кроме того, Datomic использует задание фонового индексирования для интеграции новинок в хранилище после того, как их будет накоплено достаточно (по умолчанию ~ 32 МБ, но можно настроить), что еще больше снижает постоянную нагрузку записи. Единственное, что сразу пишет Datomic, — это журнал транзакций.

Читать Масштабируемость

Datomic использует несколько уровней кэширования, т. е. memcached и одноранговый кеш, поэтому в идеальных условиях, т. е. когда рабочий набор помещается в память, системы также не будут сильно давить на чтение.

Системная нагрузка

Если вашей системе не требуется огромная масштабируемость операций записи, а данные вашего приложения, как правило, умещаются в памяти, то выбор конкретной службы хранения не имеет значения, за исключением, конечно, их операционные возможности (резервное копирование, инструменты администрирования и т. д.), которые не имеют ничего общего с Datomic.

Если, с другой стороны, ваша система требует высокой масштабируемости записи или у вас большое количество одноранговых узлов, каждый из которых работает с большим объемом данных, чем может поместиться в их памяти (вынуждая множество сегментов данных для извлечения из хранилища), вам потребуется система хранения, которая может масштабироваться по горизонтали, например ДинамоДБ. Как упоминалось в одном из комментариев, если вам нужна произвольная масштабируемость записи, Datomic в любом случае вам не подходит.

person a2ndrade    schedule 29.07.2013
comment
Примечание: если вам действительно нужна огромная масштабируемость записи, Datomic может быть не лучшим выбором. Datomic жертвует произвольной масштабируемостью записи для сохранения произвольных транзакций и объединений и имеет надежную модель данных и запросов с произвольным масштабированием чтения и запросов. datomic.com/faq.html - person overthink; 29.07.2013
comment
@overthink спасибо за указание на это, поскольку люди, незнакомые с Datomic, могут не понимать, что это ограничение дизайна. - person a2ndrade; 30.07.2013
comment
@a2ndrade Отличный ответ. У вас есть мнение о том, как каждое из поддерживаемых решений для хранения данных соответствует этим трем требованиям? - person neverfox; 04.04.2015