Решение для базы данных на 200 миллионов записей в день, ежемесячное суммирование запросов - PullRequest
3 голосов
/ 01 мая 2010

Я ищу помощь в выборе системы базы данных. (Я гуглял и читал последние несколько часов; теперь, кажется, стоит обратиться за помощью к кому-то, обладающему непосредственными знаниями.)

Мне нужно регистрировать около 200 миллионов строк (или более) за 8-часовой рабочий день в базе данных, а затем выполнять еженедельные / ежемесячные / годовые сводные запросы по этим данным. Сводные запросы были бы для сбора данных для таких вещей, как выписки счетов, например. «Сколько транзакций типа А провел каждый пользователь в этом месяце?» (может быть более сложным, но это общая идея).

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

Есть ли у кого-нибудь предложения относительно того, какие базы данных лучше всего подойдут?

P.S. Кассандра, похоже, не будет иметь проблем с обработкой записей, но как насчет огромных ежемесячных сканирований таблицы? Кто-нибудь знаком с производительностью Cassandra / Hadoop MapReduce?

Ответы [ 3 ]

2 голосов
/ 07 ноября 2010

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

При таких скоростях загрузки крайне важно сначала получить правильный уровень хранилища. Вы увидите несколько компьютеров, подключенных к хранилищу в кластере SAN. Один сервер базы данных может поддерживать миллионы операций записи в день, это количество процессорного времени, используемого на «запись», и скорость, с которой записи могут быть зафиксированы.

(производительность сети также часто является узким местом)

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

Наконец, в качестве тестовой системы мы используем 2-х ЦП 4 ГБ ОЗУ Windows 2003 virtual SQL Server 2005 и один веб-сервер IIS ОЗУ 1 ГБ ОЗУ, и мы можем принять 20 миллионов записей за 10 часов (а хранилище - RAID 5 на общем SAN). Мы получаем скорость передачи до 160 записей в секунду в виде блоков по 40 записей в одну сеть.

1 голос
/ 11 июля 2010

Greenplum или Teradata будет хорошим вариантом. Эти базы данных являются MPP и могут обрабатывать данные в масштабе Петы. Greenplum - это распределенная база данных PostgreSQL, которая также имеет собственный mapreduce. Хотя Hadoop может решить вашу проблему с хранилищем, но это не поможет выполнить сводные запросы к вашим данным.

1 голос
/ 01 мая 2010

Cassandra + Hadoop действительно подходит для вас. 200M / 8h - это 7000 / s, с чем легко мог справиться один узел Cassandra, и кажется, что ваши агрегационные вещи можно было бы просто сделать с map / lower (или Pig высокого уровня).

...