【问题标题】:How to insert a binary stream in to MySQL without ASCII conversation?如何在没有 ASCII 对话的情况下将二进制流插入 MySQL?
【发布时间】:2014-12-11 16:12:08
【问题描述】:

我有一个用“C”编写的应用程序 - debian 发行版(使用 libmysqlclient)。我的应用程序正在向数据库中插入大量行(大约 30.000 行/秒,行长 ~ 150 B)。插入会占用大量 CPU,因为客户端(我的应用程序)必须将二进制流(整数、blob)转换为 ASCII 表示形式,以转换为有效的 SQL 插入语句。 MySQL 还必须将这些值转换为二进制表示形式并将其存储到文件中。

还有我的问题。是否有可能在没有此对话的情况下调用 SQL 插入?我一直在使用经典的 sprintf(在 libc 中实现)。现在,我正在使用优化版本和 不调用 sprintf (太多的 func 调用)。我以为我会使用 MySQL 准备好的语句,但似乎准备好的语句也可以转换 '?' ASCII 变量。

一月

【问题讨论】:

    标签: mysql c libmysql


    【解决方案1】:

    mysql_real_query()

    22.8.7.56 mysql_real_query()

    int mysql_real_query(MYSQL *mysql, const char *stmt_str, unsigned long length)

    显然,像下面这样的东西应该可以工作

    #define DATA "insert into atable (acolumn) values('zero\000quotes\"\'etc ...')"
    if (mysql_real_query(db, DATA, sizeof DATA - 1)) /* error */;
    

    【讨论】:

    • 我需要类似的东西:unsigned int a[5000000]; mysql_query("INSERT INTO atable (bindata) VALUES (%d),(%d),(%d),...,(%d)",a); 在变量 'a' 中确实有整数。 mysql_query 或 real_query 需要纯 ascii 语句。我真的需要插入大量整数,而且我不想将整数转换为 ascii 表示 - 它太慢了。 (MySQL 还必须将 ASCII 转换为二进制表示 - 它也很慢。谢谢 Jan
    猜你喜欢
    • 1970-01-01
    • 2010-12-29
    • 1970-01-01
    • 1970-01-01
    • 2012-04-25
    • 2015-06-28
    • 2020-03-06
    • 2018-08-02
    • 1970-01-01
    相关资源
    最近更新 更多