数据库中的自动ID与通过代码的自动ID

时间:2015-03-10 10:24:15

标签: c++ mysql relational-database mariadb

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

审计操作要求将数据插入名为Authentication tableSystemDetails table的两个表中。自动ID是Authentication table中的主键SystemDetails table中的外键

Authentication table保留身份验证信息,即会话打开,登录会话信息和SystemDetails保存每个会话期间执行的命令的详细信息。

现在,在数据库中自动生成Authid,如下所示:

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

它的工作原理如下:

  1. 应用程序插入一个与parentauthid一起插入的身份验证记录
  2. 获取生成的身份验证ID
  3. 更新身份验证表的parentauthid字段
  4. 查找相关系统详细信息记录
  5. 从数据库中获取auth id并将记录插入数据库表中。
  6. 问题:
    数据库大小200k记录(认证表)。 我发现6000记录超过30分钟。

    经过分析,我发现第2步和第3步是数据库增长的过程。

    我觉得最好用C ++代码而不是通过数据库生成Auth id。通过此更改,我们可以删除第3步和第5步。

    哪种方法可以为表生成自动ID?

1 个答案:

答案 0 :(得分:0)

在存在多个用户的情况下生成唯一ID非常重要,可能需要写入永久存储。那很慢。客户端生成的GUID会更快。

也就是说,在插入新的子记录时,您应该已经知道了父ID(避免了步骤3),并且类似的系统详细信息只应在认证记录存在时插入到数据库中(避免步骤4)。无论您在何处生成这些ID,都是如此。