2010-07-21 3 views
3

Какое лучшее решение, если мне нужно иметь базу данных с миллиардом + объектов, и мне нужно немедленно (или почти сразу) получить доступ к любому из элементов в базе данных в любое время.Обработка хранения миллиардов кусков информации?

Эта база данных будет запрашиваться со скоростью около 1000 запросов в секунду. Строки в базе данных довольно несвязаны и, следовательно, не должны быть реляционными.

Если вам интересно, то это для моделирования движущихся элементов.

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

Деньги - фактор, поэтому чем дешевле, тем лучше. Нет никаких ограничений на программное обеспечение или инструмент, однако он должен быть открытым исходным кодом.

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

Важно, чтобы он справлялся с избыточностью и сбоями.

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

+0

В среднем, сколько объектов потребуется 1000 req/sec для сбора из ваших миллиардов? Сколько будет корреляции между данными, выбранными разными запросами? Насколько велика каждая из миллиардов или более объектов? Как идентифицируются объекты? –

+0

Скажите около 10 или 20 за запрос. Нет корреляции (есть, но она будет рассчитана на стороне клиента). Каждый объект действительно просто говорит о 10 простых текстовых атрибутах и ​​трехмерных позиционных данных. Объекты будут идентифицированы уникальным ключом (или если пользователь был привязан к определенному месту), они должны были бы иметь возможность видеть все объекты в пределах X единиц (так что должна быть возможность запрашивать db только для результатов в пределах диапазона в X, Y и Z. Другие атрибуты также могут быть запрошены, но приведут только к 10-20 или 100 у большинства возвращаемых объектов). – jreid42

+0

Чтобы уточнить, вы не можете сказать, что дайте мне все объекты с атрибутом z == this. Это всегда было бы ... дать мне все объекты в пределах 200 единиц X, Y, Z ... тогда вы могли бы дополнительно фильтровать свои атрибуты (но это может быть сделано на стороне клиента, так как в этом не было бы так много область). – jreid42

ответ

0

Поскольку вы должны быть в состоянии эффективно получить все объекты в 3D интервале (X_min < = X_obj < = X_max & Y_min < = Y_obj < = Y_max & Z_min < = Z_obj < = Z_max), я не уверен, насколько хорошо вам понравится магазин с ключевыми значениями, такой как Cassandra. Возможно, стоит также взглянуть на MongoDB, так как я считаю, что это позволяет вам индексировать несколько полей и запросов на основе интервалов.

+0

Я слышал, что MongoDB не является самым большим с точки зрения защиты ваших данных. – jreid42

+0

MongoDB так же хорош, как и любая другая БД при хороших условиях.Он признает, что аппаратное обеспечение выходит из строя, и если у вас нет данных на двух или трех разных машинах, вы не можете быть уверены в его безопасности. –

+0

Cassandra также позволяет индексировать несколько полей и запросы на основе интервалов. –

1

Один из вариантов рассмотрения - сопоставление ваших 3D-координат на space-filling curve, эффективно представляя точку как одно значение. Затем вы можете запускать запросы диапазона Cassandra для получения очков в области.

Я видел, как это реализовано в 2D-пространстве раньше, я уверен, что это возможно и в 3D.

Смежные вопросы