Пространственные данные с помощью mongodb или cassandra
Я рассматриваю Подтверждение концепции для обработки больших объемов данных, таких как> 10 ГБ, для которых требуется как минимум 200+ операций записи в секунду и около 50+ операций чтения в секунду для пространственно-связанных данных. Это тоже растущая система. В настоящее время я рассматриваю возможность перемещения этих больших объемов данных в виде больших таблиц NoSql для повышения производительности.
Я рассмотрел и более внимательно посмотрел на MongoDB и Кассандру. Насколько мое чтение идет,
Mongodb: - похоже, есть проблема с блокировкой записи - одна из публикаций в stackru предложила эту базу данных, если нет необходимости в нескольких серверах - индексы хранятся в памяти. Таким образом, чем больше рост индекса, тем хуже производительность - преимущество в том, что Mongodb имеет прямую поддержку пространственных данных и индексации наряду с такими функциями, как поиск близлежащих местоположений и т. Д., - я вижу этот пост Cassandra или MongoDB для нашего приложения на основе местоположения, предлагающего mongodb как лучший выбор
Cassandra:
- Кажется, что он лучший среди связанных БД. - Кажется, что у него отличная производительность записи и чтения. - Не поддерживает изначально пространственную индексацию, но это может быть расширено с помощью геохеширования.
Мое сердце на самом деле уходит на mongodb из-за его хорошей документации и прямой поддержки пространственных данных. У кого-нибудь был плохой опыт использования mongodb для таких больших систем? Я действительно вижу много постов на mongodb iostat для производительности.
Если mongodb не подходит, может кто-нибудь дать несколько советов о геохэшинге с помощью кассандры? Я видел ссылку http://code.google.com/p/geospatialweb/ для создания хэшей. Но есть вопросы о том, как запросить и т. Д.?
3 ответа
Я понимаю, что это старый вопрос, и я знаю, что он не дает прямого ответа на ваш вопрос, но в зависимости от ваших запросов Cassandra может оказаться не лучшим вариантом, и заставить ваши запросы работать с индексацией в MongoDB также может быть проблематично (по собственному опыту). Mongo имеет небольшое преимущество перед Cassandra для тяжелых геоданных и запросов imho.
Я бы также предложил рассмотреть ElasticSearch, который, в зависимости от вашей формы данных и типов запросов, которые вы будете делать, является, вероятно, лучшим решением. Когда вы разместили свой вопрос, он был менее вероятным вариантом, чем сегодня.
Попробуй Кассандру + Солр. Это может быть полезно: http://digbigdata.com/geospatial-search-cassandra-datastax-enterprise/
С уважением, Гутам Кумар
ТЛ; др
Elassandra комбинация из Кассандры и ElasticSearch.
Небольшое обновление из будущего.
В настоящее время я занимаюсь созданием концепции для системы больших данных в реальном времени, а также должен хранить геопространственные данные и выполнять запросы в масштабе. В последние дни я много исследовал, как правильно расположить данные и поддерживать геопространственный индекс и запросы, такие как ограничивающий прямоугольник.
Первым, о чем я прочитал, был PostgreSQL + Postgis, но самый большой экземпляр был ограничен до 200 тыс. Записей в секунду.
Второй была геопространственная база данных Tile38, которая может масштабировать запросы, но не записи. Единственный способ с этим было бы вручную сегментировать данные.
Третьим был MongoDB, потому что там вы можете найти хорошую документацию, поддерживающую геопространственную функциональность, которая мне нужна, но было трудно решить, сможете ли вы масштабировать записи.
Итак, последней базой данных была Кассандра. Эта база данных хорошо известна благодаря горизонтальному масштабированию записи и принятию сбоев. Компромисс с Cassandra заключается в том, что запрос данных имеет не очень хорошую производительность и не поддерживает гео-пространственную настройку из коробки. Для запроса данных в масштабе ElasticSearch является хорошим решением, как уже предлагал Tracker1. Сегодня я нашел новую базу данных, состоящую из Cassandra и ElasticSearch, которая называется Elassandra, которая позволяет выполнять запись в масштабе, а также считывать данные в масштабе практически в реальном времени. Пока для меня лучшее решение, с минимальными усилиями по настройке и обслуживанию.
Мы также используем Cassandra на данный момент и ищем решение пространственного индекса. Мы используем Lucene, чтобы обеспечить полнотекстовый и атрибутивный поиск, а также появилась поддержка пространственной индексации. Может быть, вы тоже хотите это проверить.
Наша текущая реализация выглядит как сегментирование информации на основе простого дерева (на основе сетки), и каждый фрагмент представляет собой индекс Lucene, и когда он увеличивается до определенного размера, индекс разделяется либо на x, либо на y. И так как у такого шарда есть двоичное представление (позиция в сетке состоит из двух битов, следующего уровня, следующих 2 битов и т. Д.), Поиск выдается по позиции и на него будет отвечать любой префикс хэда, который определяет разрешение позиции / сетки., Пока простая система работает хорошо, но в данный момент продуктивно не используется.