Кассандра или MongoDB для нашего приложения на основе местоположения - PullRequest
14 голосов
/ 20 августа 2010

Мы рассматриваем использование системы баз данных NoSQL для большого проекта. В настоящее время мы немного читали о MongoDB и Cassandra, хотя у нас нет абсолютно никакого опыта работы с ними. Мы очень хорошо разбираемся в традиционных реляционных базах данных, таких как MySQL и Microsoft SQL, но NoSQL (хранилище ключей / значений) является для нас новой парадигмой.

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

Мы делаем тяжелые записи и чтения. В основном мы имеем десятки тысяч устройств, которые сообщают:

device_id (int), широта (десятичная), долгота (десятичная), дата / время (datetime), заголовок (2), скорость (int)

Каждую минуту. Таким образом, в пиковые периоды нам необходимо обрабатывать сотни записей в секунду.

Тогда у нас также есть пользователи, которые запрашивают эту информацию в форме, передают мне все сообщения от device_id 1234 за последний день или последнюю неделю. Кроме того, пользователи делают другие запросы, например, дают мне все сообщения от device_1234, где скорость больше 50, а дата сегодня.

Итак, наши первоначальные мысли заключаются в том, что MongoDB или Cassandra позволят нам гораздо проще масштабировать это, чем при использовании традиционной базы данных.

Документ или значение в MongoDB или Cassandra для нас может выглядеть следующим образом:

{
   device_id: 1234,
   location: [-118.12719739973545, 33.859012351859946],
   datetime: 1282274060,
   heading: "N",
   speed: 34
}

Какую систему вы, ребята, рекомендуете? Большое спасибо.

Ответы [ 5 ]

15 голосов
/ 20 августа 2010

MongoDB имеет встроенную поддержку геопространственных индексов: http://www.mongodb.org/display/DOCS/Geospatial+Indexing

В качестве примера, чтобы найти 10 ближайших устройств к этому месту, вы можете просто сделать

db.devices.find({location: {$near: [-118.12719739973545, 33.859012351859946]}}).limit(10)
1 голос
/ 26 января 2011

У меня есть сообщение в приложении, основанном на местоположении, с использованием MongoDB, как и то, что вы описали. MongoDB, с его сильной поддержкой запросов и индексов, может сделать его лучшим выбором для вас. Как и в Cassandra, MongoDB имеет разделы и репликации для масштабирования операций чтения и записи. Их базовая архитектура сильно отличается.

Хотя вы не упомянули какие-либо запросы на основе местоположения, если вас интересуют такие запросы, как «дать мне все устройства в радиусе r от местоположения l и между моментами времени t1 и t2», вы найдете геопространственный запрос и индексацию MongoDB чрезвычайно полезно.

0 голосов
/ 13 сентября 2013

Вы можете рассмотреть возможность использования ElasticSearch. ES сохраняет JSON исходного документа вместе со всеми проиндексированными полями. JSON может быть реализован в любых переменных / аргументах любого современного языка. В Java можно даже отключить это и сохранить собственные данные персистенции Java в поле. После поиска выполните цикл и создайте экземпляр коллекции исходных типов объектов.

Использование поиска Elastics дает вам индексы Trie для высокоскоростных индексов числового диапазона, очевидно, вы получаете полнотекстовый поиск по каждому варианту и запросы с географическими ограничивающими рамками, все с фильтрацией И или ИЛИ. Поиск по датам также является родным (хотя обработка дат в Java - отстой, поэтому я переключился на БОЛЬШИЕ INT представления временных меток для представления дат)

НЕ УКАЗАНЫ некоторые прошлые и, возможно, настоящие решения NoSQL, географическая индексация и запросы - это ЧАСТЬ любого запроса, и никаких дополнительных шагов не требуется. То есть, одно решение MongoDB в недавнем прошлом требовало геопространственного поиска для сбора соответствующих идентификаторов документов, затем вы использовали эти идентификаторы в другом запросе и искали в них другие ваши критерии. В действительности, это то, что происходит во всех решениях в любом случае, но это намного быстрее и кэшируется в ElasticSearch.

0 голосов
/ 28 марта 2013

Перейти с mongodb для поиска географического местоположения. В версии 2.4 улучшены основные гео-функции. Многие крупные сайты используют его для поиска геолокации.

0 голосов
/ 20 августа 2010

Я проделал некоторую работу с mongodb и геопространственными данными, но не в масштабе, указанном выше. Геопространственный поиск очень быстрый, намного больше, чем MySQL.

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

домкрат

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