php - SQL 缓存表布局 - UPDATE / INSERT 性能
问题描述
我目前正在开发一个需要实现某种数据缓存的 Web 应用程序。我想将此缓存存储在 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 中。
如果我需要从缓存中获取数据,我正在对 tb_cache_header 进行 SQL 查询以查找缓存是否被命中,然后从 tb_cache_data 查询名称为 data[tb_cache_header.Id] 的列。如果没有命中缓存,我会在 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 是否更快,哪一列应该是快速读取一个缓存条目的索引?
谢谢麦丁
解决方案
推荐阅读
- android - 如何在android中为图标工具栏创建大阴影
- reactjs - auth0 parseHash 无法在哈希字符串上创建属性“__enableIdPInitiatedLogin”
- java - Java:如果 doOutput=false,则无法写入 URLConnection - 调用 setDoOutput(true)
- mysql - 通过第三个表自连接两个表
- python - 两个二维数组的比较
- javascript - 我是否需要为 SPA 保护仅支持 GET 的 REST API
- javascript - 如何通过 LINK 在 react js 中发送数据?
- laravel - 无法在 Laravel 中显示数据
- java - 调用实体管理器时的 NullPointer
- javascript - 一次只能以不同的形式选中一个单选按钮