Пространственные данные с помощью mongodb или cassandra

Я рассматриваю Доказательство концепции для обработки больших объемов данных, таких как> 10 Гб, для чего требуется как минимум 200+ операций записи в секунду и около 50+ операций чтения пространственных данных в секунду. Это тоже растущая система. В настоящее время я рассматриваю возможность переноса данных большого объема в базу данных типа большой таблицы NoSql по соображениям производительности.

Я рассмотрел и внимательно рассмотрел MongoDB и кассандру. Насколько я понимаю,

Mongodb: - похоже, проблема с блокировкой писателя - один из сообщений в stackoverflow предложил эту базу данных, если нет необходимости в нескольких серверах - индексы хранятся в памяти. Таким образом, чем больше рост индекса, тем хуже производительность - преимущество в том, что Mongodb имеет прямую поддержку пространственных данных и индексации наряду с такими функциями, как поиск ближайших местоположений и т. Д. - Я вижу этот пост Cassandra или MongoDB для нашего приложения, основанного на местоположении, предлагая mongodb как лучший выбор

Cassandra:
- Кажется, лучший из связанных БД - Похоже, имеет отличную производительность записи, а также чтения - Не поддерживает изначально пространственное индексирование, но его можно расширить с помощью геохеширования

Мне очень нравится mongodb из-за его хорошей документации и прямой поддержки пространственных данных. Был ли у кого-нибудь плохой опыт использования mongodb для таких больших систем? На самом деле я вижу много сообщений о производительности mongodb iostat.

Если mongodb не подходит, может ли кто-нибудь дать некоторые советы по геохешированию с использованием кассандры? Я увидел ссылку http://code.google.com/p/geospatialweb/ для создания хеши. Но есть вопросы, как делать запросы и т. Д.?


person Muthu    schedule 26.10.2011    source источник
comment
Есть какие-нибудь мысли о разреженном хранилище NoSQL спустя 1+ год?   -  person D.Rosado    schedule 10.12.2012
comment
На самом деле, мы по каким-то причинам не использовали simplegeo, но сохранили кассандру. В конце концов, мы решили сохранить простоту, указав широту и долготу как отдельные значения, и выбрали правильные ключи. Мы добились значительного успеха, распространив его на 8 серверов и получив результаты примерно с менее чем вторым типом производительности для ежедневных запросов, и мы счастливы.   -  person Muthu    schedule 11.12.2012
comment
Привет, Мутху, не могли бы вы подробнее рассказать о своей реализации, если это нормально :) thx.   -  person bneupaane    schedule 27.12.2012


Ответы (4)


Я понимаю, что это старый вопрос, и я знаю, что он не дает прямого ответа на ваш вопрос, но в зависимости от ваших запросов Cassandra может быть не лучшим вариантом, и заставить ваши запросы работать с индексированием в MongoDB также может быть проблематично ( на собственном опыте). У Mongo есть небольшое преимущество перед Cassandra для тяжелых геоданных и запросов imho.

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

person Tracker1    schedule 29.05.2014
comment
Истинный. Спасибо за это. Я проверю ElasticSearch. Определенно полезно. - person Muthu; 30.05.2014

Попробуйте Cassandra + Solr. Это может быть полезно: http://digbigdata.com/geospatial-search-cassandra-datastax-enterprise/

С уважением, Гаутам Кумар

person Goutham Kumar BV    schedule 07.12.2015
comment
Хотя теоретически это может дать ответ на вопрос, было бы предпочтительнее включить сюда основные части ответа и предоставить ссылку для справки. - person Martin Prikryl; 07.12.2015

tl; dr
Elassandra комбинация Cassandra и ElasticSearch.

Небольшой апдейт из будущего.

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

Первым, о котором я прочитал, был PostgreSQL + Postgis, но самый большой экземпляр ограничен максимум 200 КБ операций записи в секунду.
Второй был геопространственной базой данных, Tile38, который может масштабировать запросы, но не записи. Единственный способ сделать это - сегментировать данные вручную.
Третьим был MongoDB, потому что там вы можете найти хорошую документацию, поддерживающую геопространственные функции, которые мне нужны, но было трудно решить, сможете ли вы масштабировать записи .
Итак, последней базой данных была Кассандра. Эта база данных хорошо известна за счет горизонтального масштабирования записи и переключения при сбоях. Компромисс с Cassandra заключается в том, что запросы к данным не имеют хорошей производительности и не поддерживают геопространственные данные из коробки. Как уже предлагал Tracker1, для запроса данных в масштабе хорошо подходит ElasticSearch. Сегодня я обнаружил новую базу данных, состоящую из Cassandra и ElasticSearch, под названием Elassandra, которая позволяет писать в масштабе, а также читать данные в масштабе почти в реальном времени. Пока что для меня лучшее решение с минимальными усилиями по настройке и обслуживанию.

person Daniel Eisenreich    schedule 01.06.2019
comment
Смотрится очень интересное сочетание. Спасибо, что поделился! - person Muthu; 02.06.2019

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

Наша текущая реализация выглядит как сегментирование информации на основе простого дерева (на основе сетки), и каждый сегмент является индексом Lucene, и когда он вырастает до определенного размера, индекс разделяется либо на x, либо на y. И поскольку такой сегмент имеет двоичное представление (позиция в сетке состоит из двух битов, следующий уровень - следующие 2 бита и т. Д.), Поиск выполняется по позиции, и на него будет отвечать любой префикс шляпы осколка: позиция / разрешение сетки. . Простая система пока работает хорошо, но пока не используется продуктивно.

person Martin Kersten    schedule 04.05.2015