gpt4 book ai didi

mysql c api : inserting numbers without converting them to a string

转载 作者:太空宇宙 更新时间:2023-11-04 07:35:57 25 4
gpt4 key购买 nike

我必须从 C 应用程序将大量整数和 float 放入 mysql 数据库中。

目前我正在通过将所有这些值转换为字符串然后将它们传输到数据库来实现这一点:

char * sql_query[2048];
sprintf(sql_query, "INSERT INTO my_table VALUES (%u, %u, %d, %.7f, %u, .....");
if (mysql_real_query(&mysql, sql_query, strlen(sql_query)) {
fprintf(stderr, "SQL Request failed: Error: %s\n", mysql_error(&mysql));
}

由于这种方式非常耗时:是否有办法避免转换为需要由 mysql 解释和转换回的字符串。我正在寻找一个二进制 API,它直接吞下我的变量。存在吗?

最佳答案

导致您的 sprintf() 的开销将被您发送到 Mysql 的大量单个 INSERT 所掩盖(如果您不相信我,请尝试分析您的应用程序)。换句话说,如果您正在寻找更高的吞吐量,您很可能在错误的地方进行了优化。

更好的方法是将所有记录写入 CSV 文件(我自己使用竖线分隔),然后通过 LOAD DATA INFILE 加载整个批处理(已针对速度进行了大量优化)。这些类型的工具已经使用了几十年,从 Sybase 的 bcp(批量复制)实用程序开始一直使用。

起初,采取两个步骤(写入文件然后加载)似乎会更慢,但一个巨大负载的低开销很容易超过用大量单独的 INSERT 事务访问数据库的成本。

我已经使用 CSV 和 LOAD DATA INFILE 快速加载了数百万条记录,从 C 或脚本语言(如 Ruby)同样快速,因为服务器将完成大部分繁重的工作。

Otoh,如果您只有少量记录,那么您当前的方法非常好:它很容易维护,以防模式发生变化或您决定移植到 Mysql 以外的服务器。

关于mysql c api : inserting numbers without converting them to a string,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9017661/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com