Мне нужно посоветовать выбрать базу данных NoSQL для проекта с большим количеством минутной информации - PullRequest
3 голосов
/ 03 октября 2011

В настоящее время я работаю над частным проектом, который будет использовать Спецификация Google GTFS , чтобы получить информацию о сотнях агентств общественного транспорта, их маршрутизаторах, станциях, времени и другую связанную информацию. Я буду получать информацию от здесь и вики-страницу Google Code с аналогичной информацией. Существует много данных, которые разбиты на несколько текстовых файлов в формате CSV. Они могут быть огромными, некоторые в пределах 80-100 МБ данных.

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

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

В настоящее время я склоняюсь к MongoDB и CouchDB за их поддержку GeoSpatial, которая действительно может оптимизировать получение небольших наборов данных. Но мне также нужно обязательно связать все остановки на маршруте, потому что я буду распространять информацию по транзитному маршруту для этой линии. В этом случае я обнаружил, что могу извлечь выгоду из Graph DB, такой как Neo4j и OrientDB, но из того, что я знаю, нет поддержки GeoSpatial, и я не уверен на 100%, что Graph DB будет тем, что мне нужно.

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

Мне также было предложено разделить данные на несколько БД, но это может стать очень запутанным, потому что вся информация очень тесно связана через идентификаторы.

Буду признателен за любую помощь.

Ответы [ 3 ]

1 голос
/ 10 октября 2011

Я использовал функции GeoSpatial от Mongo и могу предложить некоторые рекомендации, если вам нужна помощь с реализацией C # или javascript - я бы порекомендовал ее запустить, потому что она очень проста в использовании.Я узнаю все о Neo4j прямо сейчас и работаю над гибридным подходом, который использует преимущества как Mongo, так и Neo4j.Возможно, вы захотите связать документы в Mongo с узлами в Neo4j, используя идентификатор объекта Mongo.

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


Добавлено 2011-02-12:

Просто хотел развить эту «гибридную» идею, поскольку я создавал прототипы и реализовывалВ последнее время появилось еще несколько решений, в которых я использовал более одной базы данных.Мартин Фаулер называет это « Постоянство Полиглота ».

Я обнаружил, что я часто использую комбинацию реляционной базы данных, базы данных документов и графической базы данных (в моем случае это обычно SQL Server, MongoDB и Neo4j).Поскольку вопрос связан с моделированием данных в той же степени, что и с геопространственными, я подумал, что затрону этот вопрос здесь:

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

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

Когда я начинаю перемещать объекты из Mongo в SQL Server, обычно важен контекст - например, если у меня есть приложение, которое позволяет пользователям создавать ежедневные отчеты на основе периодически собираемых данных, может иметь смысл запускатьпроцедура, которая создает эти отчеты каждую ночь и сохраняет объекты ежедневных отчетов в Mongo, которые могут быть объединены в более крупные сводные отчеты по мере необходимости (очевидно, это не учитывает несколько особых случаев, но это не имеет отношения к делу) ... onс другой стороны, если пользователям необходимо получать отчеты по требованию, ограниченные очень конкретными периодами времени, может иметь смысл хранить все на сервере SQL и создавать эти отчеты по мере необходимости.

Тем не менее, и это заслуживает более интенсивного размышления, вот некоторые соображения, которые могут быть полезны:

  • Обычно я пытаюсь сохранить сущности в реляционной базе данных, если обнаружу, что потянувобъект из базы данных [другими словами (в контексте реляционной базы данных) - запрос данных из базы данных, которая предоставляет данные, необходимые для генерации объекта или списка объектов, который удовлетворяет запрошенным параметрам], не требует значительной обработки (множественные объединенияНапример,
  • Требуется ли соответствие ACID (кроме того: если у вас есть проблема с графиком, вы можете использовать Neo4j для этого)?Существуют базы данных документов с соответствием ACID, но есть причина, по которой Mongo не таков: Что на самом деле означает MongoDB, не совместимый с ACID?

Одно использование Mongo я видел в дикой природечто я считаю достойным упоминания - Hadoop использовался для вычисления больших хеш-таблиц, которые затем хранились в Mongo.Я полагаю, что аналогичный подход используется TripAdvisor для пользовательской настройки с точки зрения таргетинга предложений, рекламы и т. Д.

1 голос
/ 06 октября 2011

Очевидно, что графовая база данных на 100% соответствует вашей проблеме.Мой совет здесь заключается в том, чтобы перейти к некоторому геопространственному модулю через neo4j или orientdb, хотя у вас есть и другие бесплатные и открытые реализации.

Я думаю, что лучшим на данный момент со всеми реализованными гео-пространственными объектами является пакет neo4j -atial .Но, насколько я знаю, вы также можете воспроизвести большую часть гео-пространственных объектов самостоятельно, если это необходимо.

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

0 голосов
/ 11 ноября 2011

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

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

http://postgis.refractions.net/

...