我正在尝试提高C客户端程序和InfluxDB的单个节点之间的写入性能。

目前,我的记录是每秒2.526K次写入,如下面的屏幕快照所示:

c - 使用InfluxDB提高每秒写入点数-LMLPHP

我的C程序基本上是一个无限循环,它使用libcurl生成HTTP POST请求。

这是负责POST请求的代码:

int configure_curl_easy_operation(CURL *curl_easy_handler)
{
  // using this doc page https://curl.haxx.se/libcurl/c/curl_easy_setopt.html
  // behavior options
  curl_easy_setopt(curl_easy_handler, CURLOPT_VERBOSE, 1L);

  // callback options

  // error options

  // network options
  //curl_easy_setopt(curl_easy_handler, CURLOPT_URL, "http://localhost:8086/ping"); an old test
  curl_easy_setopt(curl_easy_handler, CURLOPT_URL, "http://localhost:8086/write?db=XXX_metrics");
  curl_easy_setopt(curl_easy_handler, CURLOPT_HTTP_CONTENT_DECODING, 0L);
  curl_easy_setopt(curl_easy_handler, CURLOPT_TRANSFER_ENCODING, 0L);
  //curl_easy_setopt(curl_easy_handler, CURLOPT_HTTPHEADER, )// work here
  curl_easy_setopt(curl_easy_handler, CURLOPT_PROTOCOLS, CURLPROTO_HTTP);
  curl_easy_setopt(curl_easy_handler, CURLOPT_POST, 1L);
  curl_easy_setopt(curl_easy_handler, CURLOPT_REDIR_PROTOCOLS, 0L);
  curl_easy_setopt(curl_easy_handler, CURLOPT_DEFAULT_PROTOCOL, "http");
  curl_easy_setopt(curl_easy_handler, CURLOPT_FOLLOWLOCATION, 0L);
  //curl_easy_setopt(curl_easy_handler, CURLOPT_HTTPHEADER, NULL);

  // NAMES and PASSWORDS OPTIONS

  // HTTP OPTIONS
  // curl_easy_setopt(curl_easy_handler, CURLOPT_HTTPGET, 0L);

  // SMTP OPTIONS

  // TFTP OPTIONS

  // FTP OPTIONS

  // RTSP OPTIONS

  // PROTOCOL OPTIONS

  if (curl_easy_setopt(curl_easy_handler, CURLOPT_POSTFIELDS, "metrics value0=0,value1=872323,value2=928323,value3=238233,value4=3982332,value5=209233,value6=8732632,value7=4342421,value8=091092744,value9=230944\nmetrics value10=0,value11=872323,value12=928323,value13=238233,value14=3982332,value15=209233,value16=8732632,value17=4342421,value18=091092744,value19=230944") != CURLE_OK)
    return (1);
  //curl_easy_setopt(curl_easy_handler, CURLOPT_MIMEPOST, mime);

  // CONNECTION OPTIONS

  // SSL and SECURITY OPTIONS

  // SSH OPTIONS

  // OTHER OPTIONS

  // TELNET OPTIONS
  return (0);
}




int do_things(t_contexts_handlers *ctxts_handlers)
{
  while (g_running)
    {
      if ((configure_curl_easy_operation(ctxts_handlers->curl.curl_easy_handler)) != 0)
    {
      fprintf(stderr, "Stop running after an error occured before making a curl operation\n");
      g_running = 0;
      continue;
    }
      if (curl_easy_perform(ctxts_handlers->curl.curl_easy_handler) != CURLE_OK)
    fprintf(stderr, "an error occured\n");
    }
  return (0);
}





我不使用线程(到目前为止)
我使用简单的API(到目前为止)
我更改了一些配置设置(但它们并没有提高性能):




access-log-path : "/dev/null"
pprof-enabled : false
unix-socket-enabled : false
[ifql] enabled : false
[subscriber] enabled : false




您有一些提高性能的想法吗?

编辑:如您所见,第一个屏幕截图不是与上面的C代码相对应的屏幕截图。这是正确的:

c - 使用InfluxDB提高每秒写入点数-LMLPHP

最佳答案

尝试以每篇文章1000-10000点为单位分批发布数据。
批次大小必须足够大才能引起注意。您必须尝试找到最佳选择。

并且最好为每行放置显式且不同的时间戳,否则influxdb会将所有行视为具有相同的时间戳。在您的情况下,具有相同时间戳的多个点实际上将被视为一个数据点并相互覆盖-数据库中仅保留一个点。

关于c - 使用InfluxDB提高每秒写入点数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50024857/

10-11 08:37