Хранить данные в Ruby on Rails без базы данных - PullRequest
5 голосов
/ 04 мая 2010

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

Справочная информация: Я пишу некоторые инструменты для аналитики и панели инструментов для своего приложения ruby ​​on rails, и я надеюсь ускорить работу панели мониторинга, кэшируя результаты, которые никогда не изменятся. Прямо сейчас я извлекаю всех пользователей за последние 30 дней и реорганизую их, чтобы видеть количество новых пользователей в день. Это прекрасно работает, но занимает довольно много времени, в действительности мне нужно только рассчитать самый последний день и просто сохранить остаток массива где-то еще.

Где лучше всего хранить этот массив?

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

Если кто-то делал что-то подобное раньше, дайте мне знать, что вы сделали и как это получилось.

Ответы [ 3 ]

11 голосов
/ 04 мая 2010

В Ruby есть встроенное хранилище значений ключей на основе хэша с именем PStore. Это обеспечивает простое файловое транзакционное постоянство.

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

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

При этом тип отчета, который вы пытаетесь создать, на самом деле может быть выполнен в режиме реального времени, за исключением экстравагантно больших наборов данных. Ключ должен иметь индексы, которые описывают точную операцию группировки, которую вы пытаетесь выполнить. Например, если вы группируете по календарной дате, вы можете создать поле «дата» и синхронизировать его со временем «create_at», как требуется. Индекс в этом поле даты очень быстро сделает GROUP BY create_date:

SELECT created_date AS on_date, COUNT(id) AS new_users FROM users GROUP BY created_date
1 голос
/ 04 мая 2010

Использование облегченной базы данных, такой как sqlite, не должно быть излишним. Кроме того, вы можете использовать решения для хранения ключей, такие как Tokyo Cabinet, или даже вручную сохранить массив в виде плоского файла, но я действительно не вижу излишнего использования sqlite.

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