Warning
SingleStore 9.0 gives you the opportunity to preview, evaluate, and provide feedback on new and upcoming features prior to their general availability. In the interim, SingleStore 8.9 is recommended for production workloads, which can later be upgraded to SingleStore 9.0.
C
Dependencies
-
C compiler (e.
g. gcc) -
pthreads
library (present on most Linux distributions) -
mysqlclient
library, available from thelibmysqlclient-dev
package on Debian-based distributions.
Code
/* Compile with:** cc multi_threaded_inserts.c -lmysqlclient -pthread -o mti*/#include <stdlib.h>#include <stdio.h>#include <mysql/mysql.h>const static char *host = "127.0.0.1";const static char *user = "root";const static char *passwd = "";const static size_t port = 3306;#define NUM_WORKERS 20static volatile int keep_going = 1;void *insert_worker(void *worker_id);int main(){my_init();MYSQL conn;mysql_init(&conn);printf("Connecting to SingleStore...\n");if (mysql_real_connect(&conn, host, user, passwd, NULL, port, NULL, 0) != &conn){printf("Could not connect to the SingleStore database!\n");goto failure;}printf("Creating database 'test'...\n");if (mysql_query(&conn, "create database test") || mysql_query(&conn, "use test")){printf("Could not create 'test' database!\n");goto failure;}printf("Creating table 'tbl' in database 'test'...\n");if (mysql_query(&conn, "create table tbl (id bigint auto_increment primary key)")){printf("Could not create 'tbl' table in the 'test' database!\n");goto failure;}printf("Launching %lu insert workers...\n", NUM_WORKERS);pthread_t workers[NUM_WORKERS];size_t i;for (i = 0; i < NUM_WORKERS; ++i){pthread_create(&workers[i], NULL, &insert_worker, (void *)i);}printf("Running inserts for %lu seconds...\n", 10);sleep(10);keep_going = 0;size_t rows_inserted = 0;for (i = 0; i < NUM_WORKERS; ++i){size_t rows_i;pthread_join(workers[i], &rows_i);rows_inserted += rows_i;}printf("Inserted %lu rows. Cleaning up...\n", rows_inserted);if (mysql_query(&conn, "drop database test")){printf("Could not drop the testing database 'test'!\n");}mysql_close(&conn);return 0;failure:mysql_close(&conn);return 1;}void *insert_worker(void *worker_id){size_t id = (size_t) worker_id;MYSQL conn;mysql_init(&conn);if (mysql_real_connect(&conn, host, user, passwd, "test", port, NULL, 0) != &conn){printf("Worker %lu could not connect to the SingleStore database! Aborting...\n", id);exit(1);}size_t i;for (i = 0; keep_going; i += 8){if (mysql_query(&conn, "insert into tbl values (null), (null), (null),""(null), (null), (null), (null), (null)")){printf("Worker %lu failed to insert data, aborting...\n", id);exit(1);}}mysql_close(&conn);return (void *)i;}
Last modified: July 26, 2023