Макет таблицы SQL Cache - производительность UPDATE / INSERT - PullRequest
0 голосов
/ 13 октября 2019

В настоящее время я занимаюсь разработкой веб-приложения, в котором мне нужно реализовать какой-либо кеш данных. Я хочу сохранить этот кеш в базе данных SQL (mySQL 5.6)

Одна запись в кеше всегда имеет 35000 двойных значений и идентифицируется индексом от 1 до 35000.

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

Таблица заголовков имеет следующеемакет:

tb_cache_header
id (primary key) | cache_criteria | lock | create_date
               0 |              a |    0 |  2019-10-10
               1 |              b |    0 |  2019-10-11                    
               3 |              f |    0 |  2019-10-12

Вторая таблица имеет следующую компоновку:

tb_cache_data

   id | data0 | data1 | data3
    1 |   0.1 |   0.3 |   0.5
    2 |   0.3 |   1.2 |   1.4
...
35000 |   0.2 |   3.1 |   2.1

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

Если мне нужно получить данные из кэша, я делаю SQL-запрос к tb_cache_header, чтобы определить, был ли достигнут кэш, и затем запросить столбец с данными data [tb_cache_header.Id] из tb_cache_data. Если кэш не ударил, я добавляю новую строку в tb_cache_header и новый столбец в tb_cache_data. После этого столбец заполняется транзакцией, вызываемой с помощью готовых операторов в php, например UPDATE tb_cache_data SET data4 = 0.5 WHERE id=10.

Это займет до 20 секунд для обновления.

Так что будет лучше использоватьдругой формат таблицы, подобный этому?

tb_cache_data

id | cache_id (foreign key from tb_cache_header.id) | data
 1 |                                              0 |  0.1
 2 |                                              0 |  0.3
 ...
 1 |                                              1 |  0.3
 2 |                                              1 |  1.2
 ...
 1 |                                              3 |  0.5
 2 |                                              3 |  1.4

И использовать, чем INSERT INTO tb_cache_data (id, cache_id, data) VALUES (10, 4, 0.5)

В этом случае INSERT / UPDATE быстрее и какой столбец должен быть индексом для быстрого чтения одной записи кэша?

Спасибо, Маддин

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