我正在开发一个用C++开发的企业应用程序,数据库是mariadb。应用程序处理两个审核文件 Authentication.log
和 SytemDetails.log
。
审核操作需要将数据插入到名为Authentication 表
和SystemDetails 表
的两个表中。自动 id 是身份验证表
的主键和SystemDetails表
中的外键。
身份验证表
保存身份验证信息,即 session 打开、登录 session 信息,SystemDetails
保存每个 session 期间执行的命令的详细信息。
现在数据库中会自动生成一个Authid,如下:
Authentication :AuthID,ParentAuthID,info1,Info2....
SystemDetails:sysid,authid,info1,info2....
其工作原理如下:
- 应用程序插入一条不带parentauthid的身份验证记录
- 获取生成的身份验证 ID
- 更新身份验证表的parentauthid字段
- 查找相关的系统详细信息记录
- 从数据库获取身份验证 ID 并将记录插入数据库表中。
问题:
DB 大小 200k 条记录(身份验证表)。
我发现 6000 条记录花费了超过 30 分钟。
经过分析,我发现步骤2和步骤3是数据库增长的耗时过程。
我感觉最好在 C++ 代码中生成 Auth id,而不是通过数据库。通过此更改,我们可以删除步骤 3 和 5。
哪种技术可以更好地为表生成自动 ID?
最佳答案
在多个用户存在的情况下生成唯一 ID 并不简单,并且可能需要写入永久存储。那很慢。客户端生成的 GUID 会更快。
也就是说,当插入新的子记录时,您应该已经知道父 ID(避免步骤 3),并且系统详细信息类似地仅应在身份验证记录存在时插入到数据库中(避免步骤 4)。无论您在何处生成这些 ID,都是如此。
关于c++ - 数据库中的自动 id 与通过代码自动 id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28961184/