2010-08-18 3 views
2

У меня есть система, которая собирает данные журнала Apache в режиме реального времени из примерно 90-100 веб-серверов. Я также определил некоторые шаблоны URL.Какая лучшая база данных/хранилище для хранения статистических данных?

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

Я думал об использовании MySQL для хранения статистических данных, обновлять их заявление: "Update table установить count = кол + 1, где ....",

, но я боюсь, что MySQL будет медленным для данных с такого количества серверов. Кроме того, я ищу некоторые решения для хранения данных и хранения данных, которые более масштабируемы и просты. (В качестве СУБД MySQL поддерживает слишком много вещей, которые мне не нужны в этой ситуации). Есть ли у вас какие-либо идеи ?

ответ

1

Apache Cassandra является высокопроизводительным магазином для хранения столбцов и может очень хорошо масштабироваться. Кривая обучения немного крутая, но без проблем обрабатывать большие объемы данных.

Более простым решением будет хранилище с ключом, например Redis. Это легче понять, чем Кассандра. Как правило, Redis поддерживает репликацию master-slave как способ масштабирования, поэтому производительность записи вашего основного сервера может быть узким местом. Riak имеет децентрализованную архитектуру без каких-либо центральных узлов. Он не имеет ни единой точки отказа, ни каких-либо узких мест, поэтому легче масштабировать.

+2

Redis будет идеальным решением, поскольку он обеспечивает операции атомарного инкремента для защиты от гонки условия. Cassandra и Riak не поддерживают эту функцию, которая затруднит обновление данных. –

0

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

  1. счетчик = storage.get (ключ)
  2. storage.set (ключ, кол + 1)

Я работал с Токио кабинетом раньше, и у них есть метод «addint», который идеально подобранный мой случай, мне интересно, если другие хранилища имеют аналогичную функцию ? Я не выбрал Tokyo Cabinet/Tyrant, потому что у меня возникли некоторые проблемы с его масштабируемостью и стабильностью данных (например, ремонт поврежденных данных, ...)

+0

Redis поддерживает это с помощью команды [INCR] (http://code.google.com/p/redis/wiki/IncrCommand), Riak этого не делает. MongoDB - еще одна альтернатива, если вам нужно атомарно увеличивать значение, так как оно имеет оператор [$ inc] (http://www.mongodb.org/display/DOCS/Updating#Updating-%24inc). На другой ноте: на Stack Overflow вы должны использовать комментарии, чтобы задавать вопросы, вместо ответов :) (см. Часто задаваемые вопросы) –

+0

Спасибо Niels, я попытался использовать Comment. Но StackOverFlow не позволяет мне иметь «новую строку» для комментариев. Вот почему я использую режим ответа, надеюсь, что SOF поддержит его в ближайшее время. MongoDB выглядит хорошо, есть также большое изменение в масштабируемости (режим ошпаривания) в версии 1.6. Я дам ему попробовать. – fang