В настоящее время я занимаюсь разработкой веб-приложения, в котором мне нужно реализовать какой-либо кеш данных. Я хочу сохранить этот кеш в базе данных 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 быстрее и какой столбец должен быть индексом для быстрого чтения одной записи кэша?
Спасибо, Маддин