theblabs
@theblabs

Как построить работу с BigData?

Ниже описал часть таблиц из БД. Стек: PostgreSQL + Symfony4 + PHP7. Рассматриваем вариант переноса операций в отдельную БД - ElasticSearch. Но возникает сложность с связью таблиц. Ниже привёл кейс.

Таблица Member
- ID
- FIO
- Email
- Phone
- Password
- Date

Таблица Операции
- ID
- Member_id
- Operation_type
- Value (true/false)
- Date

Таблица Operation_type
- ID
- Name
- Date

Кейс:

Пользователь Х зарегистрировался на сайте, создаётся запись в таблицу Member и запись операции (тип Регистрация) в таблицу операций. Позже админу выводится статистика операций в формате:
- Member_ID
- Member_fio
- Member_Email
- Member_Phone
- Member_Date
- Operation_type_id
- Operation_value
- Operation_date

Т.е. Данные операции в отчете операций содержат данные пользователя, который совершил операцию

Отсюда возникает вопрос, как организовать работу с BigData при условии, что есть связи между таблицами?

Рассматриваем такое решение:
1. Делать запись в таблицу операций вместе с данными пользователя, которые будут браться из таблицы пользователей. В этом случае, если пользователь изменит данные, они будут отличаться в отчетах
2. В момент формирования отчёта брать часть данных из одной БД, часть из другой. При этом в операциях должен быть идентификатор этого пользователя

Подскажите, какие решения могут быть и что будет оптимальным для описанного кейса?
  • Вопрос задан
  • 172 просмотра
Пригласить эксперта
Ответы на вопрос 1
leahch
@leahch
3D специалист. Dолго, Dорого, Dерьмово.
Все достаточно просто, перестаньте думать таблицами и начните думать ДОКУМЕНТАМИ.
У вас есть всего два документа - два индекса. Индекс Пользователей, и индекс Операций.
Пользователь представляет из себя документ со всеми полями таблицы member. А Операция, состоит из конкатенации полей member-operation-operationtype. Да данные в индексе Операции будут дублировать некоторые поля из Пользователей, но это и не страшно, это правильно, так как это фактически лог.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы