LINUX.ORG.RU

База с Shared Memory Driver

 , , ,


1

1

Какие имеются базы, у которых драйвер с локальным инстансом работает не через юникс сокеты или TCP/IP а через Shared Memory. Требуется БЫСТРОЕ исполнение прастейших запросов типа выборки по первичному ключу. Ну или в качестве теста «select 1 from dual».

Язык разработки С/C++. Приложения состоят из многих воркеров.

NoSQL не надо!

★★★

Последнее исправление: vromanov (всего исправлений: 4)
Ответ на: комментарий от vromanov

«Умеет» — это как? Длину пакета из заголовка по смещению дёргать? Или, в том числе, TLS терминировать?

anonymous
()
Ответ на: комментарий от anonymous

Diameter это что-то вроде бинарного хмл в котором все элементы стандартизированы. Умеет например удалить какой-то элемент, вставить итд. Короче, пакет собирается полностью новый. Там ещё куча протокольных заморочек типа замены имени сервера получателя или отправителя. Выбор куда отправлять тоже через луа делается.

vromanov ★★★
() автор топика
Ответ на: комментарий от vromanov

Diameter это что-то вроде бинарного хмл

кулстори. tcp — тоже бинарный xml

anonymous
()
Ответ на: комментарий от vromanov

Что у тебя за комп? Еще 5 лет назад, mysql в самой слабой конфигурации выдавал не менее 20к/с инсертов. Pg тем более должен быть быстрым. Вы делали тест без statement query? ^_^

Что касается реализаций, то можно посмотреть bdb, unqlite, sophia, redis или остаться на shm. Вариантов немного: mmap vs heap vs shm. Все остальные бд это тупо обертки поверх них.

gh0stwizard ★★★★★
()
Ответ на: комментарий от anonymous

SHM имеет встроенные бонусы, которые надо пилить самому (точнее их за тебя уже запилили), чтобы расшарить доступ к данным между процессами. В постановке ТС вообще неясно, что ему нужно. Так что сойдет и собственный heap + pop, push, hash table и будет в разы быстрее shm.

gh0stwizard ★★★★★
()
Последнее исправление: gh0stwizard (всего исправлений: 1)
Ответ на: комментарий от vromanov

Один процесс, одно соединение, никаких потоков. Лучше написать, что вам нужно и не метаться из стороны в сторону, указав лишь на проблемное место (оп./сек.).

gh0stwizard ★★★★★
()
Ответ на: комментарий от gh0stwizard

Вот тут выложил тестовое приложение. https://github.com/vvromanov/db_test

Create test data ... Done!
Connection established
Execute direct [CREATE TABLE bench (id integer NOT NULL, value integer NOT NULL, CONSTRAINT bench_pk PRIMARY KEY (id) )] ... Done! (3 ms)
Prepare ... Done!
    insert ..................................................
    Execution time 61891 ms, CPS=8078, 500000 operations
Reorder test data ... Done!
    select ..................................................
    Execution time 54678 ms, CPS=9144, 500000 operations
Reorder test data ... Done!
    update ..................................................
    Execution time 78538 ms, CPS=6366, 500000 operations
Reorder test data ... Done!
    delete ..................................................
    Execution time 55191 ms, CPS=9059, 500000 operations
Execute direct [drop table bench] ... Done! (30 ms)
Connection closed

vromanov ★★★
() автор топика
Ответ на: комментарий от gh0stwizard

Вот прогнал тесты еще и с MySql. ODBC драйвер Posgresql сосет. mysql 5.1 из коробки с MEMORY таблицей

     Db Name | insert | select | update | delete |
  PostgreSql |   8034 |   9808 |   6857 |   9314 |
       MySql |  22675 |  16035 |  18782 |  19992 |
    TimesTen |  85792 | 198601 |  70466 |  66461 |

vromanov ★★★
() автор топика
Ответ на: комментарий от vromanov

Можно же попытаться потюнить PostgreSQL. Например, попробовать unlogged таблицу (create unlogged table ...). Или сделать tablespace в памяти и в нем уже крутить эти таблицы

anonymous
()
5 марта 2015 г.
Ответ на: комментарий от vromanov

Для интереса сравнил с SQlite на /dev/shm. Использовал db_test_my. ~/.odbc.ini:

[mytest]
Description=SQLite test db
Driver=SQLITE3
Database=/dev/shm/test.db

Результат прогона на Core i5-3470 3.20GHz:

Test MySql (ODBC) performance
Create test data ... Done!
Connection established
Execute direct [drop table if exists bench] ... Done! (10 ms)
Execute direct [create table if not exists bench (id integer not null, value integer not null, primary key (id))] ... Done! (0 ms)
Execute direct [create unique index bench$id on bench (id)] ... Done! (0 ms)
Prepare ... Done!
    select1 ..................................................
    Execution time 623 ms, CPS=802568, 500000 operations
    insert ..................................................
    Execution time 28247 ms, CPS=17700, 500000 operations
Reorder test data ... Done!
    select ..................................................
    Execution time 5341 ms, CPS=93615, 500000 operations
Reorder test data ... Done!
    update ..................................................
    Execution time 25112 ms, CPS=19910, 500000 operations
Reorder test data ... Done!
    delete ..................................................
    Execution time 27425 ms, CPS=18231, 500000 operations
Execute direct [drop table bench] ... Done! (0 ms)
Error [-1] in SQLDisconnect(hdbc)ERROR:
[SQLite]unfinished statements
ODBC Error/Warning = 25000, Additional Error/Warning = -1
iliyap ★★★★★
()
Ответ на: комментарий от vromanov

Ещё сравнил с Berkeley DB SQL на /dev/shm. Berkeley DB SQL это SQLite с табличным движком Berkeley DB. Имеет API SQLite. Распространяется в составе Berkeley DB.

[iliyap@z100109 db_test-master]$ ./db_test_my
Test MySql (ODBC) performance
Create test data ... Done!
Connection established
Execute direct [drop table if exists bench] ... Done! (0 ms)
Execute direct [create table if not exists bench (id integer not null, value integer not null, primary key (id))] ... Done! (2 ms)
Execute direct [create unique index bench$id on bench (id)] ... Done! (1 ms)
Prepare ... Done!
    select1 ..................................................
    Execution time 792 ms, CPS=631313, 500000 operations
    insert ..................................................
    Execution time 20520 ms, CPS=24366, 500000 operations
Reorder test data ... Done!
    select ..................................................
    Execution time 8093 ms, CPS=61781, 500000 operations
Reorder test data ... Done!
    update ..................................................
    Execution time 16244 ms, CPS=30780, 500000 operations
Reorder test data ... Done!
    delete ..................................................
    Execution time 23944 ms, CPS=20882, 500000 operations
Execute direct [drop table bench] ... Done! (0 ms)
Error [-1] in SQLDisconnect(hdbc)ERROR:
[SQLite]unfinished statements
ODBC Error/Warning = 25000, Additional Error/Warning = -1
iliyap ★★★★★
()

а разве есть такие?

както не очень представляется сигнальный механизм триггеров без сокетов, если только на пайпах

Лучше тогда искать так: IPC db sql

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.