Как эффективно хранить много данных в БД? - PullRequest
0 голосов
/ 09 февраля 2012

У меня нет опыта работы со многими записями.Ранее я использовал MySql для хранения статей, комментариев и других простых данных.Теперь мне нужно написать приложение на Ruby On Rails, которое каждую минуту передавало бы в базу данных десятки записей.

Это приложение будет смотреть некоторые веб-сайты и измерять пару их параметров.Веб-сайты будут смотреть 24x7.Если я захочу просмотреть 100 веб-сайтов, я буду иметь в своей таблице базы данных около 144000 (100 * 60 * 24) новых записей каждый день.

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

Я думаю, что не очень разумно сохранять такие записи, каккомментарии в блог-системе.Стоит ли хранить данные без каких-либо «причудливых» решений?

1 Ответ

2 голосов
/ 09 февраля 2012

Я бы предложил вам использовать MongoDB, в настоящее время у меня есть несколько экземпляров, на которых хранятся миллионы документов.В отличие от вашей обычной реляционной схемы, вы можете использовать поддержку поддокументов MongoDB.

MongoDB - это база данных NoSQL, но ее очень легко использовать и начать с нее, если вы знакомы с базами данных и вашим днем.На сегодняшний день OO.

MongoDB имеет драйверы для большинства популярных языков, включая Ruby, так что вы можете установить драйвер для Ruby (при условии, что это то, что вы хотите использовать), выполнив следующую команду с использованием gem:

gem install mongo

И если запущенный Debian / Ubuntu просто не запускает mongodb со следующим:

apt-get install mongodb

Это должно помочь вам начать работу.

В зависимости от размера каждой записи вы можете использовать различныеВ различных проектах MongoDB в настоящее время имеет ограничение в 16 МБ на документ, поэтому вам необходимо знать об этом.

У меня была бы коллекция именованных веб-сайтов для хранения основной информации о сайтах, которые вы отслеживаете (имя,url, ссылка на клиента, ...)

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

Таким образом, каждый документ в статистике будет чем-токак:

{
  _id : X,
  website_id : STORE_THE_ID_HERE,
  timestamp_start : PUT_THE_TIMESTAMP_WHEN_YOU_START_MONITORING_HERE,
  timestamp_end : SAME_AS_ABOVE_REALLY,
  stats_count : A_DENORMALIZED_COUNT_OF_STATS
  stats : [ { views : X, clicks : X2, ... },
       ...
  ]
}

Надеюсь, что вы начали, я думаю, MongoDB идеально соответствует вашим требованиям, если вы хотите попробовать.

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