Important
The SingleStore 9.1 release candidate (RC) is available now. It will be promoted to general availability (GA) soon and at that time it will be renamed to SingleStore 10.
In the interim, SingleStore 9.1 RC can be used to preview, evaluate, and provide feedback on the new and upcoming features in SingleStore 10, while SingleStore 9.0 is recommended for production workloads.
C
Dependencies
-
C compiler (e.
g. gcc) -
pthreadslibrary (present on most Linux distributions) -
mysqlclientlibrary, available from thelibmysqlclient-devpackage 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: