2010-08-06 1 views
7

Я разрабатываю базу данных, которая содержит большие научные наборы данных. Типичным сценарием использования является то, что каждый день в базу данных будет записываться порядка 5 ГБ новых данных; 5GB также будет удаляться каждый день. Общий размер базы данных составит около 50 ГБ. Сервер, на котором я запущен, не сможет хранить весь набор данных в памяти.Могу ли я ожидать значительного повышения производительности за счет перемещения большого хранилища ключей из MySQL в базу данных NoSQL?

Я структурировал базу данных так, что основная таблица данных - это только хранилище ключей/значений, состоящее из уникального идентификатора и значения.

Запросы, как правило, для примерно 100 последовательных значений, например. SELECT Value WHERE ID BETWEEN 7000000 AND 7000100;

В настоящее время я использую MySQL/MyISAM, и эти запросы занимают порядка 0,1 - 0,3 секунды, но в последнее время я понял, что MySQL, вероятно, не является оптимальным решением для того, что в основном представляет собой большой ключ/хранилище значений.

Прежде чем я начну выполнять большую работу по установке нового программного обеспечения и перезаписи всей базы данных, я хотел бы получить приблизительное представление о том, могу ли я увидеть значительное повышение производительности при использовании базы данных NoSQL (например, Tokyo Tyrant, Cassandra, MongoDB) вместо MySQL для этих типов поиска.

Благодаря

+2

Прежде чем отказаться от RDBMSes, мне нужен профиль для MySQL/Innodb и postgresql. Я также хочу быть уверенным, что у меня есть соответствующие показатели на столе. – tpdi

+0

Re: Indices, My table имеет две колонки: ID BIGINT; Значение FLOAT; и у меня есть ID как мой первичный ключ, так как мои запросы всегда используют идентификатор между ... –

+0

Wow! 50 ГБ данных в таблице с двумя столбцами. Я думаю, от 0,1 до 0,3 секунд не следует чихать, в сложившихся обстоятельствах. Если это какой-то наш бизнес, возможно, вы могли бы рассказать нам, что вы держите в том, что должно быть почти рекордным столом? –

ответ

2

Я использую MongoDB в производстве для интенсивной работы с записью, где я хорошо разбираюсь в курсах, которые вы используете для операций WRITE и READ, размер базы данных составляет около 90 ГБ и один экземпляр (amazon m1.xlarge) делает 100QPS. Я могу сказать вам, что типичный запрос key-> value занимает около 1-15 мс в базе данных с записями 150 М, причем время запроса достигает 30-50 мс при большой нагрузке. во всяком случае 200ms - это слишком много для хранилища ключей/значений.

Если вы используете только один товарный сервер я хотел бы предложить MongoDB, как это довольно эффективные и простой в освоении , если вы ищете распределенное решение вы можете попробовать любого из клонов Динамо: Cassandra (Facebook) или Project Volemort (LinkedIn) является самым популярным. Имейте в виду, что поиск сильной консистенции замедляет эти системы совсем немного.

+1

С благодарностью запустил некоторые тесты теперь с MongoDB, Tokyo Tyrant и Cassandra. Я определенно вижу значительные улучшения в запросах. Однако объемные вставки fyi оказываются не совсем такими быстрыми (по сравнению с MySQL LOAD INFILE). –

2

я ожидал бы Cassandra сделать лучше, где набор данных не помещается в памяти, чем система на основе B-дерева, как ТС, MySQL, или MongoDB. Конечно, Cassandra также спроектирован так, что, если вам нужно больше производительности, тривиально добавлять дополнительные машины для поддержки вашей рабочей нагрузки.

3

Также обратите внимание также OrientDB. Он использует индексы с алгоритмом RB + Tree. В моих тестах с 100 ГБ чтение базы данных из 100 предметов заняло 0,001-0,015 секунды на моем ноутбуке, но зависит от того, как ключ/значение распределяются внутри индекса.

Чтобы сделать свой собственный тест с ним, потребуется менее 1 часа.

Одна из плохих новостей заключается в том, что OrientDB еще не поддерживает кластерную конфигурацию (планируется на сентябрь 2010 года).