Рекомендации по созданию крупномасштабной системы хранения данных

StackOverflow https://stackoverflow.com/questions/255131

  •  05-07-2019
  •  | 
  •  

Вопрос

У меня есть большой объем данных, которые мне нужно сохранить, и я могу создавать отчеты по каждому из них, представляющему событие на веб-сайте (мы говорим о скорости более 50 в секунду, поэтому очевидно, что более старые данные необходимо будет агрегировать).

Я оцениваю подходы к реализации этого, очевидно, что это должно быть надежным и должно быть как можно более простым в масштабировании.Кроме того, должна быть возможность гибко и эффективно создавать отчеты на основе полученных данных.

Я надеюсь, что некоторые разработчики имеют опыт работы с таким программным обеспечением и смогут дать рекомендацию и / или указать на подводные камни.

В идеале я бы хотел развернуть это на EC2.

Это было полезно?

Решение

Ух ты.Вы открываете огромную тему.

Несколько вещей, которые сразу же пришли мне в голову...

  1. тщательно продумайте свою схему вставок в транзакционной части и операций чтения в отчетной части, возможно, вам лучше хранить их отдельно, если у вас действительно большие объемы данных
  2. внимательно посмотрите на задержку, которую вы можете допустить между отчетами о ваших транзакциях в режиме реального времени и агрегированными отчетами о ваших исторических данных.Возможно, вам следует создать процесс, который периодически запускается и агрегирует ваши транзакции.
  3. внимательно изучите любое требование, согласно которому вы представляете отчетность по всем вашим транзакционным и агрегированным данным либо в одном отчете, либо в виде детализации от одного к другому
  4. прототип с несколькими значимыми запросами и некоторыми реалистичными объемами данных
  5. получите базу данных реального качества, готовую к работе на предприятии, т.е.Oracle / MSSQL
  6. подумайте об использовании чужого кода / продукта для составления отчетности, например Кристалл/БО / Когнос

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

ПРИВЕТ и удачи

Другие советы

@ Саймон сделал много замечательных замечаний, я просто добавлю несколько и еще раз повторю / подчеркну некоторые другие:

<Ол>
  • Используйте правильный тип данных для меток времени - убедитесь, что СУБД имеет правильную точность.
  • Рассмотрите возможность очереди для захвата событий, позволяя нескольким потокам / процессам обрабатывать фактическое хранение событий.
  • Разделите схемы для своего транзакционного хранилища и хранилища данных
  • Серьезно рассмотрите периодический ETL от транзакционной базы данных до хранилища данных.
  • Помните, что у вас не будет 50 транзакций в секунду 24x7x365 - пиковые транзакции против средних транзакций
  • Исследовать таблицы разбиения в СУБД. Oracle и MSSQL разделят значения (например, дату / время).
  • С самого начала имейте политику архивирования / хранения данных. Слишком много проектов просто начинают записывать данные без планов их удаления / архивирования.
  • Я удивлен, что ни один из ответов здесь не касается Hadoop и HDFS - я хотел бы предположить, что это потому, что SO - это вопрос для программистов, а ваш вопрос на самом деле является вопросом науки о данных.

    Если вы имеете дело с большим количеством запросов и большим временем обработки, вы должны использовать HDFS (формат распределенного хранилища в EC) для хранения ваших данных и выполнения пакетных запросов (т.е. аналитики) на обычном оборудовании.

    Затем вы предоставите столько экземпляров EC2, сколько необходимо (сотни или тысячи в зависимости от того, насколько велики ваши требования к обработке данных), и запустите карту, чтобы уменьшить количество запросов к вашим данным для создания отчетов.

    Ух ты..Это огромная тема.

    Позвольте мне начать с баз данных.Сначала найдите что-нибудь хорошее, если вы собираетесь получать сумасшедшие объемы данных.Мне нравятся Oracle и Teradata.

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

    Я полагаю, что вы можете подойти к этому двумя способами

    • Бросьте деньги на решение проблемы:Купите лучшее в своем классе программное обеспечение (базы данных, программное обеспечение для составления отчетов) и наймите в помощь нескольких опытных специалистов

    • Используйте доморощенный подход:Создавайте только то, что вам нужно прямо сейчас, и выращивайте все это органично.Начните с простой базы данных и создайте платформу веб-отчетов.Существует множество доступных инструментов с открытым исходным кодом и недорогих агентств, которые выполняют эту работу.

    Что касается подхода EC2..Я не уверен, как это впишется в стратегию хранения данных.Обработка ограничена, и именно в этом заключается сила EC2.Ваша основная цель - эффективное хранение и восстановление.

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top