Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Самая быстрая СУБД при инсерте
|
|||
|---|---|---|---|
|
#18+
Здравствуйте В моем проекте требуется постоянно вписывать в базу простые строки. В общем все сводиться к двум действиям - вписать строку (INSERT) и иногда считать значение автоинкремента (@@IDENTITY). В принципе никакие индексы не нужны. Потом эта база вся скопом переноситься в MSSQL2000 (дописывается в существующую базу). Требуется заносить по несколько тысяч строк в секунду (таблиц много - более сотни). Очень хочется узнать какая СУБД (freeware) наилучшая для этих целей - сам MSSQL не хочет заносить более 500-800 строк ни в какую... Зарание спасибо. PS - должна быть поддержка полей типа text (BLOB) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2003, 22:11 |
|
||
|
Самая быстрая СУБД при инсерте
|
|||
|---|---|---|---|
|
#18+
Какая конкретно сказать трудно. Необходимо прогнать одинаковый тест на нескольких СУБД. Но самое главное каждая СУБД должна быть сконструирована профессионально. Не одинаково, а профессионально . Одному на разных нереально сделать профессионально. Невозможно быть профи на всех СУБД. Да и ни к чему размазываться как масло по бутерброду. Из своего личного опыта могу сказать на примере 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: Мнений тебе выскажут, думаю много. Окончательное решение принимай сам. Удачи! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2003, 09:04 |
|
||
|
Самая быстрая СУБД при инсерте
|
|||
|---|---|---|---|
|
#18+
В принципе в DB2 можно быстро добавлять записи в обход транзакционного механизма. Обычно это делается в хранилищах данных ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2003, 11:10 |
|
||
|
Самая быстрая СУБД при инсерте
|
|||
|---|---|---|---|
|
#18+
2Аrchi откуда входные данные? телеметрия? вероятно нужно смотреть в сторону in-memory DB. Я правда не знаю, есть ли там приличные из разряда free. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2003, 11:40 |
|
||
|
Самая быстрая СУБД при инсерте
|
|||
|---|---|---|---|
|
#18+
В MSSQL смотри BULK INSERT (функции bulk_init и т.п. в MSSQL ODBC): 500 записей (Time-Value) без индексов вставляется за 30ms, 50000 - 1,5 секунды на простой PIII машине. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2003, 21:48 |
|
||
|
Самая быстрая СУБД при инсерте
|
|||
|---|---|---|---|
|
#18+
Если всетаки говорим про закачку больших объемов данных в обход механизма транзакций, то в ASA см. Load table ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2003, 07:44 |
|
||
|
Самая быстрая СУБД при инсерте
|
|||
|---|---|---|---|
|
#18+
2Andrew_256: Большое спасибо за совет - скорости просто супер! А у тебя нет какой-то документации или примеров по bulk-insert на С++? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2003, 23:11 |
|
||
|
Самая быстрая СУБД при инсерте
|
|||
|---|---|---|---|
|
#18+
В Informix например всю таблицу можно разместить в оперативной памяти (если место есть) set table имя_таблицы memory resident, тогда любые операции с данными в такой таблице наверное будут идти очень быстро :-) Кроме того можно отключить журналирование для этой таблицы (если вся база с журналированием) через alter table type (raw) А вообще первое правило при массовой заливке данных - отключить в таблице индексы (или удалить) а после пересоздать и собрать статистику, блокировать доступ других пользователей к заливаемым таблицам, а лучше ко всей базе :-) фрагментировать таблицу по какому-либо правилу на несколько физических дисков. Ну и иметь мощное железо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2003, 10:02 |
|
||
|
Самая быстрая СУБД при инсерте
|
|||
|---|---|---|---|
|
#18+
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); } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2003, 20:52 |
|
||
|
Самая быстрая СУБД при инсерте
|
|||
|---|---|---|---|
|
#18+
Ребята смотри общепризнанные тесты...там все написано.... http://www.tpc.org/tpcc/results/tpcc_perf_results.asp ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2003, 10:02 |
|
||
|
|

start [/forum/topic.php?fid=35&fpage=54&tid=1554307]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
41ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
51ms |
get tp. blocked users: |
2ms |
| others: | 216ms |
| total: | 355ms |

| 0 / 0 |
