Какую базу данных NoSQL использовать в качестве замены для MySQL? - PullRequest
6 голосов
/ 11 июня 2011

Когда дело доходит до NoSQL, есть изумительное количество вариантов выбора конкретной базы данных NoSQL, как ясно в вики NoSQL .

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

У меня нет документов для хранения, поэтому это устраняет ориентированные на документы базы данных NoSQL. Я хочу очень высокую производительность. База данных NOSQL должна очень хорошо работать с Play Framework и языком scala. Это должно быть с открытым исходным кодом и бесплатно.

Итак, как указано выше, какую базу данных NoSQL мне следует использовать?

Ответы [ 4 ]

9 голосов
/ 11 июня 2011

Я думаю, что вы, возможно, неправильно понимаете природу "баз данных документов".Поэтому я бы порекомендовал MongoDB, который является базой данных документов, но я думаю, вам понравится.

MongoDB хранит «документы», которые в основном являются записями JSON.Самое интересное в том, что он понимает внутренности документов, которые он хранит.Таким образом, с учетом документа, подобного этому:

{
  "name": "Gregg",
  "fave-lang": "Scala",
  "fave-colors": ["red", "blue"]
}

Вы можете запросить "fave-lang" или "fave-colors".Вы даже можете индексировать любое из этих полей, даже массив «fave-colors», что потребует многотарифной реляционной земли.

Play предлагает плагин MongoDB, который я не использовал.Вы также можете использовать драйвер Casbah для MongoDB , который я использовал очень хорошо и отлично.DSL-запрос Rogue для MongoDB, написанный FourSquare, также стоит посмотреть, если вам нравится MongoDB.

MongoDB чрезвычайно быстр.Кроме того, вы избавите себя от необходимости писать схемы, потому что любая запись может иметь любые поля, которые вы хотите, и они по-прежнему доступны для поиска и индексации.Ваша модель данных, вероятно, будет выглядеть так же, как и сейчас, с «коллекцией» пользователей (например, таблицей) и другими коллекциями с записями, ссылающимися на ID пользователя по мере необходимости.Но если вам нужно добавить поле в одну из ваших коллекций, вы можете сделать это в любое время, не беспокоясь о старых записях или переносе данных.Технически нет никакой схемы для записей MongoDB, но вы в конечном итоге организуете подобные записи в коллекции.

MongoDB - одна из самых забавных технологий, с которыми мне приходилось сталкиваться в последние несколько лет.В ту счастливую субботу я решил проверить это и через 15 минут был продуктивным и почувствовал, что «получил».Я регулярно даю демонстрацию на работе, где я показываю людям, как начать работу с MongoDB и Scala за 15 минут, включая установку MongoDB.Бесстыдный плагин, если вы пользуетесь веб-сервисами, вот мой пост в блоге о начале работы с MongoDB и Scalatra с использованием Casbah: http://janxspirit.blogspot.com/2011/01/quick-webb-app-with-scala-mongodb.html

По крайней мере, вы должны перейти к http://try.mongodb.org

Это то, с чего я начал.

Удачи!

2 голосов
/ 11 июня 2011

Хм, вы хотите очень высокую производительность обхода и используете слово «друзья».Первое, что приходит на ум - это базы данных графиков.Они специально созданы для этого конкретного случая.

Попробуйте Neo4j http://neo4j.org/

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

Он написан на Java, поэтому у вас есть собственные библиотеки или вы можете встроить его в приложение Java / Scala.

2 голосов
/ 11 июня 2011

На данный момент ответ - нет, я боюсь.

Вы не можете просто преобразовать вашу реляционную модель с объединениями в дизайн хранилища ключ-значение и ожидать, что это будет отображение 1: 1. Из того, что вы сказали, кажется, что у вас есть объединения, некоторые из них рекурсивные, то есть ссылаются на другую строку из той же таблицы.

Вы можете начать с денормализации существующей реляционной схемы, чтобы приблизить ее к дизайну, который вы хотите достичь. Тогда вы могли бы легче увидеть, если то, что вы пытаетесь сделать, можно сделать на практике, и какую технологию выбрать. Вы даже можете продолжить использование MySQL. То, что у вас могут быть объединения, не означает, что вы должны это делать, что делает возможным создание нереляционного проекта в реляционной СУБД, такой как MySQL.

Кроме того, имейте в виду - нереляционные базы данных были разработаны для масштабируемости, а не производительности! Если у вас нет тысяч пользователей и фермы серверов, традиционная реляционная база данных может на самом деле работать лучше для вас.

0 голосов
/ 24 декабря 2016

Что касается MongoDB или Cassendra, вы сейчас (декабрь 2016 года, с опозданием на 5 лет) попробуйте longevityframework.org .

Создайте модель своего домена, используястандартные идиомы Scala, такие как классы дел, сопутствующие объекты, опции и неизменяемые коллекции.Расскажите нам о типах в вашей модели, и мы обеспечим постоянство.

См. " Подробнее Awesomeness с макро-аннотациями! " от Джон Салливан .
Он предоставляет пример на GitHub .

Если вы уже рассматривали долговечность раньше, вы будете удивлены тем, насколько легко стало начинать сохранение ваших доменных объектов.,И самое приятное, что все, что связано с постоянством, скрыто в аннотациях.Классы вашего домена полностью свободны от постоянных проблем, прекрасно отражают модель вашего домена и готовы к использованию во всех частях вашего приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...