какой инструмент базы данных NOSQL лучше выбрать для моего приложения? - PullRequest
3 голосов
/ 31 января 2011

Я планирую разработать какое-нибудь приложение, например, общаться с друзьями друзей друзей. Это может выглядеть как Facebook или Twitter, но изначально я планирую реализовать это, чтобы узнать больше о базах данных NOSQL.

В NOSQL есть ряд инструментов для работы с базами данных. Я прошел через множество типов баз данных, таких как хранилище документов, хранилище значений ключей, тип столбцов, графовые базы данных. И, наконец, я придумала два инструмента для работы с базами данных: Cassandra & Neo4J. Правильно ли выбрать кого-то, если не поправишь меня и не поделишься со мной ценными мнениями.

Еще одна вещь - это языковая привязка, которую я выбираю, это JAVA.

Мой вопрос Какой инструмент базы данных подходит для моего приложения?

В ожидании ваших ценных мнений. Спасибо, что потратили ваше драгоценное время.

Ответы [ 4 ]

4 голосов
/ 31 января 2011

Тим, ты действительно должен был опубликовать свой вопрос отдельно, а не как ответ на ФП, чего не было.

Но чтобы ответить, во-первых, прочитайте слайды Бена Блэка по адресу http://www.slideshare.net/benjaminblack/introduction-to-cassandra-replication-and-consistency.

Готово? Хорошо, теперь по конкретным вопросам:

«Как различия в состоянии данных [реплики] будут согласованы при последующем чтении?»

Победит самая высокая отметка времени.

«Все ли зоны работают от одних и тех же системных часов?»

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

Например: если у вас есть список пользователей, следующих за вами в клоне Twitter, вы должны предоставить каждому подписчику свой собственный столбец, и не будет никакого способа потерять данные, независимо от того, насколько не синхронизированы часы.

Если у вас есть инструмент администратора для вашего сайта и два администратора загружают новый значок «одновременно», одно обновление выиграет, и не имеет значения, какое именно. Здесь вы хотите, чтобы ваши часы были синхронизированы, но «в течение нескольких мс» достаточно близко.

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

«Вернутся ли устаревшие данные?»

Узел (о котором лучше думать, чем о "зоне") не будет иметь данных, которые он пропустил во время простоя, до тех пор, пока он не отправит эти данные путем восстановления чтения, хинтованной передачи обслуживания или восстановления антиэнтропии. Тем временем он ответит на запросы на чтение устаревшими данными; если вы используете достаточно высокий уровень запросов на чтение уровня согласованности, то вы будете ждать достаточно других ответов, чтобы в любом случае всегда видеть самую последнюю версию, что может означать невозможность выполнить запросы, если недостаточно других реплик.

В противном случае низкий уровень согласованности (например, ОДИН) неявно означает «Я понимаю, что более высокая доступность и меньшая задержка, которую я получаю с этим более низким уровнем согласованности, означает, что я в порядке, если временно вижу устаревшие данные после простоя».

1 голос
/ 31 января 2011

Если вам не нужно масштабировать в краткосрочной перспективе, я бы выбрал Neo4j, потому что он предназначен для хранения сетей, подобных той, которую вы описали. (Если вам в конечном итоге понадобится масштабировать, возможно, вы можете бросить Gizzard перед ним или что-то в этом роде. Удачи!)

1 голос
/ 31 января 2011

Я не уверен, что понимаю все последствия модели согласованности Cassandata в отношении согласования данных в нескольких зонах доступности.

Учитывая несколько зон и учитывая, что узел-координатор в Кассандре использовал уровень согласованности, который не требует от всех зон отчитываться, а только кворума, как будут согласовываться различия в состоянии данных зоны напоследующее чтение?

Все ли зоны работают с одинаковыми системными часами?Или у каждой зоны свои часы?Если они не работают на одних и тех же часах, как они синхронизируются, чтобы можно было сравнивать временные метки в процессе «исцеления», когда различия согласованы?

Предположим, что зона с точными и актуальными данными теперь отключена, а зона, которая была отключена во время предыдущей записи (поэтому она не обновлялась и содержит устаревшие данные),сейчас снова в сети.Будут ли возвращены устаревшие данные?Будет ли у координатора какой-либо способ узнать, что данные устарели?

0 голосов
/ 31 января 2011

Вы смотрели Riak базу данных?Он имеет тот же фон, что и Cassandra, но вам не нужно заботиться о синхронизации меток времени (они включают другой метод для определения состояния данных).

Моё первое приложение было построено на базе данных Cassandra.Но я сейчас пытаюсь Riak , потому что это более подходит.Это не только разница в ключах (ключи - значения / супер столбец - ключи - значения), но и в функции хранилища документов.

У него есть метод для создания сложных запросов с использованием MapReduce.У Cassandra есть эта опция с использованием Hadoop, но это звучит сложно.

Более того, он использует хорошо известный и определенный протокол доступа в http / s, поэтому легко управлять сервером, когда у вас много трафика.

Единственный минус в том, что он медленнее, чем Кассандра.Но обычно вы будете читать записи больше, чем писать (а Кассандра оптимизирована для записи, а не чтения), поэтому конечный результат должен быть в порядке.

...