c++ - 数据库中的自动 id 与通过代码自动 id

标签 c++ mysql relational-database mariadb

我正在开发一个用C++开发的企业应用程序,数据库是mariadb。应用程序处理两个审核文件 Authentication.logSytemDetails.log

审核操作需要将数据插入到名为Authentication 表SystemDetails 表 的两个表中。自动 id 是身份验证表主键SystemDetails表中的外键

身份验证表保存身份验证信息,即 session 打开、登录 session 信息,SystemDetails保存每个 session 期间执行的命令的详细信息。

现在数据库中会自动生成一个Authid,如下:

Authentication :AuthID,ParentAuthID,info1,Info2....    
SystemDetails:sysid,authid,info1,info2....

其工作原理如下:

  1. 应用程序插入一条不带parentauthid的身份验证记录
  2. 获取生成的身份验证 ID
  3. 更新身份验证表的parentauthid字段
  4. 查找相关的系统详细信息记录
  5. 从数据库获取身份验证 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/

相关文章:

c++ - 获取显卡型号?

c++ - 如何在程序中查找数据段和代码段范围

relational-database - 外键与部分键及其 E-R 表示

mysql - 如何对数据库进行天数和时间安排建模?

mysql - 在关系数据库中存储列表的最有效方法是什么?

c++ - ADL 不考虑与模板参数关联的 namespace 吗?

c++ - 如何获取数组第一个元素的镜像?

php - 使用特定的 php 日期时间戳从今天获取值

php - MYSQL选择共同好友

php - 使用php将日期存储到mysql