2013-05-31 3 views
0

Прежде всего: я знаю, что DB Key-Value лучше всего работают с исполняемыми базами данных. Мое предположение заключается в том, что это связано с их простотой (придерживаясь очень немногих примитивов). (EDIT2: Очевидно также благодаря неоспоримым в основном находятся в памяти)DocumentDB vs Key-Value DB с иерархией Производительность

Во всяком случае, что о более сложных datastructures как иерархии деревьев и любит. С БД, как Redis вы должны построить структуру, основанную на «плоской» хэши со ссылками, тогда как с документами БД, как CouchDB вы просто создать структуру себя нравится:

"menu": { 
    "id": "file", 
    "value": "File", 
    "popup": { 
     "menuitem": [ 
      { 
       "value": "New", 
       "onclick": "CreateNewDoc()" 
       }, 
       { 
       "value": "Open", 
       "onclick": "OpenDoc()" 
       }, 
       { 
       "value": "Close", 
       "onclick": "CloseDoc()" 
       } 
     ] 
} 

Если у меня есть структуры, как это, делает это даже иметь смысл использовать производительность redis и удобство использования?

Интересно, что ключевое значение и документ Базы данных сравниваются с 1: 1 очень часто, при обслуживании другой цели и/или использования ИМХО.

EDIT:

Что я ищу: вообще-то я хотел бы иметь JSON-подобный DB магазин, который дает мне легкость определения и создания сложных структур на лету и получение хорошие вещи от использования Базы данных-системы (переход на другой ресурс, скорость, ...).

Спасибо!

+0

«В первую очередь: я знаю, что база данных с ключом - это наиболее эффективные базы данных». Возможно, некоторые из них, но я бы не считал это универсальной правдой. Я не понимаю, что вы ищете. Вам нужно будет увидеть, как ваши требования и знания, а также ИТ-специалисты совпадают с различными платформами. Каковы ваши требования к богатым запросам и т. Д.? – WiredPrairie

+0

Вы правы, и не существует универсальной истины. Но смелое предположение часто помогает и улучшает дискуссии. Без обид :-) На данный момент мне не нужны богатые запросы, я знаю, что DocumentDB, такие как Mongo и Couch, намного лучше. Поэтому я в основном интересовался аспектом производительности. При использовании их аналогичным образом (одинаковые/аналогичные структуры данных). – AlessandroEmm

+0

StackOverflow работает лучше, когда вопросы не обсуждают. http://stackoverflow.com/faq#dontask – WiredPrairie

ответ

2

Если у меня есть такие структуры, имеет ли смысл использовать redis производительность и удобство использования?

Структура вы изображали состоит из внедренных данных в JSon документе, однако даже с базами данных документов есть еще разница между embedded и referenced/linked данных. Если вы вложите много данных в один документ, вы можете столкнуться с проблемами производительности и фрагментацией данных. С другой стороны, привязка является более гибкой, но требует некоторой логики соединения. Подводя итог - это зависит от вашей модели домена и проблемы, которую вы пытаетесь решить. Что касается redis, то есть библиотеки, такие как ohm, которые обеспечивают большую абстракцию данных уровня на основе OOP.

Что я ищу: вообще-то я хотел бы иметь JSON-подобный DB магазин, который дает мне легкость определения и построения сложных структур на лету и получать хорошие вещи от использования Базы данных-системы (переход на другой ресурс, скорость, ...).

Хотя mongodb является, вероятно, самой популярной базой данных документа, за которой следует couchdb, вы также можете попробовать другие решения, такие как arangodb или orientdb. Каждый из них построен поверх некоторой философии, которая может обеспечить преимущества в определенных областях по сравнению с другими решениями, например. couchdb's map-reduce способ запросов может не подходить для всех, но он прочен.

+0

Спасибо, это то, что я искал. Я думаю, что я собираюсь использовать подход Redis Set + JSON. Кажется, это лучшая комбинация для моего решения. – AlessandroEmm

1

Хранилища с ключевыми значениями, такие как Redis, работают так хорошо, потому что они хранят данные в памяти, которые вы можете читать/записывать во много раз быстрее, чем данные, хранящиеся на диске.

Проблема с хранением в памяти - это отказоустойчивость: если Redis неожиданно отключается, память очищается, и все ваши данные теряются. Таким образом, Redis подходит, когда вы часто читаете и записываете данные, но вы не против, если эти данные будут потеряны. Например: сеансы входа в систему, где потеря данных означает, что пользователи снова заходят в систему.

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

+0

AFAIK Redis также способен к отказоустойчивости, я просто зависит от того, как часто вы синхронизируются с файловой системой. Но вы правы, это еще одна важная разница в способе их реализации. Итак, давайте предположим, что мы аккуратно создаем резервную копию памяти db на диск, как бы они сравнивались с моим примером. Я полагаю, что объединение нескольких хэшей в Redis для реализации какой-то иерархии также замедлит работу. Я вообще задаюсь вопросом, является ли хранение вложенных структур данных в redis просто неправильным и своего рода неправильным инструментом для задачи. – AlessandroEmm

+0

Как правило, чем сложнее ваши данные, тем более неуместным Redis является решение. – garbados

Смежные вопросы