powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / Самая быстрая СУБД при инсерте
11 сообщений из 11, страница 1 из 1
Самая быстрая СУБД при инсерте
    #32217569
Archi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте

В моем проекте требуется постоянно вписывать в базу простые строки.

В общем все сводиться к двум действиям - вписать строку (INSERT) и иногда считать значение автоинкремента (@@IDENTITY).

В принципе никакие индексы не нужны.

Потом эта база вся скопом переноситься в MSSQL2000 (дописывается в существующую базу).

Требуется заносить по несколько тысяч строк в секунду (таблиц много - более сотни).

Очень хочется узнать какая СУБД (freeware) наилучшая для этих целей - сам MSSQL не хочет заносить более 500-800 строк ни в какую...

Зарание спасибо.

PS - должна быть поддержка полей типа text (BLOB)
...
Рейтинг: 0 / 0
Самая быстрая СУБД при инсерте
    #32217672
Фотография Zmeishe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какая конкретно сказать трудно. Необходимо прогнать одинаковый тест на нескольких СУБД. Но самое главное каждая СУБД должна быть сконструирована профессионально. Не одинаково, а профессионально .
Одному на разных нереально сделать профессионально. Невозможно быть профи на всех СУБД. Да и ни к чему размазываться как масло по бутерброду.

Из своего личного опыта могу сказать на примере InterBase.

Если закачивать в таблицу по 100 тыс. записей, также будут тормоза.
Перестройка индексов, работа триггеров и т.д. Закачка таким лобовым способом у меня шла целую ночь. Затем в литературе нашёл способ как это сделать намного быстрее.

Рекомендации были следующие:
1. Данные заранее должны удовлетворять бизнес правилам БД. Т.е. закачивается не "мусор" из "помойки", а информация например из более мелкой БД в крупную. И бизнес правила у них должны быть аналогичными.
2. Отключить индексы (не удалить, а отключить)
3. Отключить триггеры.
4. Закачивать данные порциями (я делал по 5 тыс) затем COMMIT и новая порция.
5. Включить триггеры и индексы.
Перестройка индексов в этом случае шла от 3 сек. до 10 сек на всю таблицу.
Общее время этим способом занимало около 2 мин, на том же самом железе конечно. В 1999 г. такие операции пришлось делать у заказчика на P-II, RAM-64Мб (Сейчас смешно). И IB тогда был то ли 4.5 то ли 5.0.
На мощных серверах под Linux время не замечал - очень быстро.
Что касается BLOB на сегодняшний день это не проблема, если пользоваться IB компонентами из стандартной поставки Билдер или Дельфи.

PS: Мнений тебе выскажут, думаю много. Окончательное решение принимай сам.
Удачи!
...
Рейтинг: 0 / 0
Самая быстрая СУБД при инсерте
    #32217844
IBMer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В принципе в DB2 можно быстро добавлять записи в обход транзакционного механизма. Обычно это делается в хранилищах данных
...
Рейтинг: 0 / 0
Самая быстрая СУБД при инсерте
    #32217927
Фотография killed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Аrchi

откуда входные данные? телеметрия?

вероятно нужно смотреть в сторону in-memory DB. Я правда не знаю, есть ли там приличные из разряда free.
...
Рейтинг: 0 / 0
Самая быстрая СУБД при инсерте
    #32218685
Andrew_256
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В MSSQL смотри BULK INSERT (функции bulk_init и т.п. в MSSQL ODBC):
500 записей (Time-Value) без индексов вставляется за 30ms, 50000 - 1,5 секунды на простой PIII машине.
...
Рейтинг: 0 / 0
Самая быстрая СУБД при инсерте
    #32218750
Ermak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если всетаки говорим про закачку больших объемов данных в обход механизма транзакций, то в ASA см. Load table ...
...
Рейтинг: 0 / 0
Самая быстрая СУБД при инсерте
    #32221600
Archi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2Andrew_256: Большое спасибо за совет - скорости просто супер! А у тебя нет какой-то документации или примеров по bulk-insert на С++?
...
Рейтинг: 0 / 0
Самая быстрая СУБД при инсерте
    #32226011
Фотография Andron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В Informix например всю таблицу можно разместить в оперативной памяти (если место есть) set table имя_таблицы memory resident, тогда любые операции с данными в такой таблице наверное будут идти очень быстро :-)
Кроме того можно отключить журналирование для этой таблицы (если вся база с журналированием) через alter table type (raw)

А вообще первое правило при массовой заливке данных - отключить в таблице индексы (или удалить) а после пересоздать и собрать статистику, блокировать доступ других пользователей к заливаемым таблицам, а лучше ко всей базе :-)
фрагментировать таблицу по какому-либо правилу на несколько физических дисков. Ну и иметь мощное железо.
...
Рейтинг: 0 / 0
Самая быстрая СУБД при инсерте
    #32226896
Andrew_256
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1. Все примеры и документация вся есть в MSDN
2. На всякий случай - привожу простейший пример. Здесь используется bulk файл в MS формате. Чтобы его сгенерировать - запусти этот же пример, но укажи DB_OUT при вызове bcp_init.
3. В документации описаны функции по указанию формата CSV файла для импорта, я просто не разбирался.
4. Ну и учти, что транзакций и т.п. с этим методом не будет. Хотя обычно они в таких задачах и не требуются.


#include "stdafx.h"
#include <stdio.h>
#include <string.h>
#include <tchar.h>
#include <windows.h>

#include <sql.h>
#include <sqlext.h>
#include <odbcss.h>

SQLHENV henv = SQL_NULL_HENV;
SQLHDBC hdbc = SQL_NULL_HDBC;
SQLHDBC hdbc1 = SQL_NULL_HDBC;
SQLHSTMT hstmt1 = SQL_NULL_HSTMT;

int main(int argc, char* argv[])
{
RETCODE retcode;

// Bulk copy variables.
SDWORD cRows;

// Allocate the ODBC environment and save handle.
retcode = SQLAllocHandle (SQL_HANDLE_ENV, NULL, &henv);

// Let ODBC know this is an ODBC 3.0 app.
retcode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,
(SQLPOINTER) SQL_OV_ODBC3,
SQL_IS_INTEGER);

// Allocate ODBC connection handle, set bulk copy mode, and
// then connect.
retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc1);
retcode = SQLSetConnectAttr(hdbc1, SQL_COPT_SS_BCP,
(void *)SQL_BCP_ON,
SQL_IS_INTEGER);

retcode = SQLConnect(hdbc1, (unsigned char *)"MSSQLDSN", SQL_NTS,
(unsigned char *)"sa", SQL_NTS, (unsigned char *)"", SQL_NTS);

// Initialize the bulk copy.
DWORD start_time = GetTickCount();

retcode = bcp_init(hdbc1, "Database..Database", "F:\\bulktest.bcp",
"F:\\BCPERROR.out", DB_IN);

// not the ODBC return of SQL_SUCCESS.
if ( (retcode != SUCCEED) )
{
return(1);
}

// Execute the bulk copy.
retcode = bcp_exec(hdbc1, &cRows);

if ( (retcode != SUCCEED) )
{
return(1);
}

printf("Time to bulk insert %d records: %d ms\n",cRows,GetTickCount() - start_time);


/* Clean up. */
SQLDisconnect(hdbc1);
SQLFreeHandle(SQL_HANDLE_DBC, hdbc1);
SQLFreeHandle(SQL_HANDLE_ENV, henv);

getchar();
return(0);
}
...
Рейтинг: 0 / 0
Самая быстрая СУБД при инсерте
    #32227060
non
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ребята смотри общепризнанные тесты...там все написано....

http://www.tpc.org/tpcc/results/tpcc_perf_results.asp
...
Рейтинг: 0 / 0
Самая быстрая СУБД при инсерте
    #32228172
Фотография eNose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[не активирован]
[не одобрен]
Самая быстрая - какая-нить in-memory database, например Raima DB.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / Самая быстрая СУБД при инсерте
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]