我正在开发一个模块,它必须记录并稍后在表单字段中回放所有单独的击键。我希望能够将其存储在数据库中,并能够快速检索。
通常,它将用于重放用户进入最终提交的文本的路径。
我想知道是否为每个按键插入一条记录(可能将带有压缩计数的连续相同笔划分组,虽然丢失了一些时间戳信息?)很好,
CREATE TABLE `keystroke_log` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
`keystroke` char(1) NOT NULL,
`count` smallint(6) unsigned NOT NULL,
`user_id` int(11) unsigned NOT NULL,
'form_field_id' int(11) unsigned NOT NULL,
'timestamp' timestamp NOT NULL default CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
或者将所有键击作为序列化的JSON对象存储在一行中是否更好?
CREATE TABLE `keystroke_log` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
`user_id` int(11) unsigned NOT NULL,
`form_field_id` int(11) unsigned NOT NULL,
`keystroke_dump` MEDIUMTEXT DEFAULT NULL,
) ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8 ENGINE=InnoDB DEFAULT CHARSET=utf8;
编辑:keystroke_dump
JSON对象理想情况下包含时间戳和实际的UTF-8笔画代码
有没有更好的方法来存储和检索这些数据?
关系数据库中的JSON永远不是一个好主意,但最常见的查询必须加载整个对象,无论如何查询完整回放我不确定使用sql结构是否会导致显着的性能损失?