Какое решение NoSQL выбрать для базы данных доменных имен? - PullRequest
2 голосов
/ 25 февраля 2011

У меня есть проект, который хранит несколько миллионов доменных имен в базе данных и выполняет поисковые запросы, чтобы найти, присутствует ли домен в БД. Единственная операция, которая мне нужна - проверить, существует ли данное значение. Нет запросов диапазона, никакой дополнительной информации, ничего.

Количество запросов к базе данных довольно велико, например, 100 000 за один сеанс пользователя.

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

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

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

Можете ли вы что-нибудь предложить?

Ответы [ 3 ]

1 голос
/ 28 февраля 2011

Гораздо меньшим и более быстрым решением было бы использование Berkeley DB с API пары ключ-значение . Berkeley DB - это библиотека базы данных, которая связывается с вашим приложением, поэтому нет никаких затрат на клиент-сервер и на отдельный сервер для установки и управления. Berkeley DB очень прост и предоставляет, среди нескольких API, простой API-ключ-значение (NoSQL), который предоставляет все основные процедуры управления данными, которые вы ожидаете найти в гораздо более сложной и сложной СУБД (индексация, вторичные индексы, внешние ключи), но без накладных расходов на движок SQL.

Отказ от ответственности: я менеджер по продукту в Berkeley DB, поэтому я немного предвзят. Тем не менее, он был разработан для того, чтобы делать именно то, что вы запрашиваете - прямое, быстрое, масштабируемое управление данными со значением ключа без лишних затрат.

Фактически, существует множество прикладных служб типа «база данных», которые используют Berkeley DB в качестве основного хранилища данных. Большинство открытых и / или коммерческих реализаций LDAP используют Berkeley DB (в том числе OpenLDAP, Redhat's LDAP, Sun Directory Server и т. Д.). Cisco, Juniper, AT & T, Alcatel, Mitel, Motorola и многие другие используют Berkeley DB для управления своими. Они используют Berkeley DB для своих систем управления шлюзом, аутентификацией и конфигурацией. Они используют BDB, потому что он делает именно то, что им нужно, это очень быстро, масштабируемый и надежный.

1 голос
/ 28 февраля 2011

Вы можете довольно хорошо обойтись, используя только Фильтр Блума , если вы можете принять очень маленький процент ложных срабатываний (при условии, что вы используете достаточно большой фильтр).Вы, конечно, могли бы использовать Cassandra .Он интенсивно использует фильтры Блума, поэтому просить что-то, что не существует, быстро, и вам не нужно беспокоиться о ложных срабатываниях.Он предназначен для обработки наборов данных, которые не помещаются в память, поэтому снижение производительности происходит довольно плавно.

Импорт любого объема данных должен быть быстрым - на обычной машине Cassandra может обрабатывать около 15 000 операций записи в секунду.

0 голосов
/ 02 марта 2011

Много вариантов здесь. Berkeley DB, безусловно, делает свою работу и, вероятно, является одним из самых простых решений. Так же просто: сохраняйте все в memcached, тогда у вас есть возможность разделить кеш значений на несколько машин, если это необходимо (если нагрузка на запрос или размер данных растут).

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