Я пытаюсь создать одну гигантскую схему, которая облегчает пользователям запрос данных, чтобы добиться этого, необходимо объединить потоковые события с User Metadata
на USER_ID and ID
. В инженерии данных эта операция называется «обогащение данных», верно? приведенные ниже таблицы являются примером.
# `Event` (Stream)
+---------+--------------+---------------------+
| UERR_ID | EVENT | TIMESTAMP |
+---------+--------------+---------------------+
| 1 | page_view | 2020-04-10T12:00:11 |
| 2 | button_click | 2020-04-10T12:01:23 |
| 3 | page_view | 2020-04-10T12:01:44 |
+---------+--------------+---------------------+
# `User Metadata` (Static)
+----+-------+--------+
| ID | NAME | GENDER |
+----+-------+--------+
| 1 | Matt | MALE |
| 2 | John | MALE |
| 3 | Alice | FEMALE |
+----+-------+--------+
==> # Result
+---------+--------------+---------------------+-------+--------+
| UERR_ID | EVENT | TIMESTAMP | NAME | GENDER |
+---------+--------------+---------------------+-------+--------+
| 1 | page_view | 2020-04-10T12:00:11 | Matt | MALE |
| 2 | button_click | 2020-04-10T12:01:23 | John | MALE |
| 3 | page_view | 2020-04-10T12:01:44 | Alice | FEMALE |
+---------+--------------+---------------------+-------+--------+
Я разрабатывал это с помощью Spark, а User Metadata
хранится в MySQL, затем я понял, что это будет пустой тратой параллелизма Spark, если код искры включает объединение с MySQL таблицами, верно?
Узкое место будет происходить на MySQL, если траффи c будет увеличена, я думаю ..
Должен ли я хранить эти таблицы на key-value store
и периодически обновлять его?
Можете ли вы дать мне некоторую идею для решения этой проблемы? Как вы обычно обрабатываете этот тип операций?