|
Модераторы: Akina |
|
BegemotX2 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 13.11.2005 Репутация: нет Всего: 1 |
Товарищи, подскажите нормальный способ, как в связке java+mssql быстрее всего вставить много строк.
PreparedStatement, Statement.addBatch/executeBatch, Statement.executeUpdate? или есть еще какие-нить способы? "Много" - это 3 варианта: 50, 1000, 20 000 000 Если есть различия, хорошо бы знать оптимальный способ для каждого варианта. Заранее Спасибо. |
|||
|
||||
LSD |
|
|||
Leprechaun Software Developer Профиль Группа: Модератор Сообщений: 15708 Регистрация: 24.3.2004 Репутация: нет Всего: 537 |
1. 50 это не много.
2. Со стороны Java используй addBatch/executeBatch. Что использовать со стороны сервера я не в курсе (разве, что индексы отключить на время). -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
LSD |
|
|||
Leprechaun Software Developer Профиль Группа: Модератор Сообщений: 15708 Регистрация: 24.3.2004 Репутация: нет Всего: 537 |
-------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
archimed7592 |
|
|||
Архимед Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: нет Всего: 93 |
bulk insert, если я не ошибаюсь. -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
Servena |
|
|||
Опытный Профиль Группа: Участник Сообщений: 251 Регистрация: 24.7.2007 Где: Днепропетровск Репутация: 10 Всего: 14 |
Я думаю, это еще один "умник модератор или кактамеще" опять прочитал незнакомое слово и переместил тему с Джавы сюда.
Хочу знать имя, если это так (одного уже знаю, это stab). |
|||
|
||||
archimed7592 |
|
|||
Архимед Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: нет Всего: 93 |
Вопрос по базе данных, а не по Java - какие проблемы? 0_о У тебя плохо со зрением? Это сделал LSD(и правильно сделал) и двумя постами выше это очень хорошо видно: -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
Servena |
|
|||
Опытный Профиль Группа: Участник Сообщений: 251 Регистрация: 24.7.2007 Где: Днепропетровск Репутация: 10 Всего: 14 |
Судя из вопроса понятно, что вставлять будут из Джава - так пусть обсуждается "мат часть" джавы по работе с этой БД. Ведь для этого все равно будут использоваться какие-нибудь драйвера (типа ОДБС для Джава).
Но конечно, есть и работа для администратора БД - приготовить ее к вставке большого объема данных(но это не обязательно). |
|||
|
||||
archimed7592 |
|
|||
Архимед Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: нет Всего: 93 |
Servena, а какая разница откуда вставлять? Хоть из VB - строка "bulk insert ..." не будет сильно отличаться от языка к языку.
-------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
Servena |
|
|||
Опытный Профиль Группа: Участник Сообщений: 251 Регистрация: 24.7.2007 Где: Днепропетровск Репутация: 10 Всего: 14 |
Нет, я пытаюсь донести другую мысль. Некто, BegemotX2 захотел узнать что-то и выставил свой пост в интересующей его теме. Тут появляется "продвинутый" ЛСД - отвечает, и потом (судя по всему, он считает что дал полный, абсолютный ответ) двигает тему. Да, конечно, это его право. Но нужно вникнуть глубже, не отделять тему от человека, подождать других ответов и немного во времени (а не 20 мин.) - т.е. проявить терпимость и уважение к человеку. |
|||
|
||||
LSD |
|
|||
Leprechaun Software Developer Профиль Группа: Модератор Сообщений: 15708 Регистрация: 24.3.2004 Репутация: нет Всего: 537 |
По сути вопроса: BegemotX2 разместил тему не в разделе Java, а в разделе Общие вопросы по базам данных. Оптимизацию вставки данных можно проводить с обоих сторон, со стороны Java это addBatch/executeBatch, со стороны SQL Server это bulk insert. Одно другому не мешает. Раз авторо разместил вопрос в Общие вопросы по базам данных значит его интересует в первую очередь оптимизация со стороны СУБД, а это уже вопрос по SQL Server, куда я и переместил тему. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
BegemotX2 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 13.11.2005 Репутация: нет Всего: 1 |
Лан, товарищи, большое спасибо. Кой-че узнал, а потом проорался с ваших пререканий.
Просто увидел в одном C# проекте конструкцию using (SqlBulkCopy copy = new SqlBulkCopy(this.conn))... которая в итоге работала быстрее, чем тот же Statement.excuteUpdate в java но java ни о каком SqlBulkCopy не слышала, а 20 000 000 строк вставить надо. Заинтересовало, как. А вы тут базар развели. PS: какая по сути разница, где тема, если в старом разделе ссылка осталась? |
|||
|
||||
archimed7592 |
|
|||
Архимед Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: нет Всего: 93 |
Библиотека для C# писана микрософтом и ессно в ней есть полноценная поддержка микрософтовской СУБД. Что же касается java - я уверен, что там должна быть возможность сделать примерно так:
т.е. сформировать запрос руками. -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
BegemotX2 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 13.11.2005 Репутация: нет Всего: 1 |
Насколько я знаю, BULK INSERT выполняет загрузку из файла.
хотя это как вариант. На всякий случай поделюсь, что сделал я. 1. удалил индексы. 2. отключил автоматическое подтверждение транзакций Connection.setAutoCommit(false) 3. использовал PreparedStatement
4. раз в 2000 строк выполнял Connection.commit() В результате 50млн (не 20млн) строк вставились за 6 часов на athlon 2000, 768mb Это сообщение отредактировал(а) BegemotX2 - 6.11.2007, 23:18 |
|||
|
||||
kat_ru |
|
||||
Другого не будет Профиль Группа: Участник Сообщений: 23 Регистрация: 16.1.2007 Где: Moscow City Репутация: нет Всего: нет |
трололо всем. Не хочу создавать новую тему, имхо эта, более чем подходит для моего почти аналогичного вопроса. Суть - хочу понять, есть ли что то (рецепты), что поможет ускорить процесс, который описываю ниже.
Для начала. Имеется определение: решение без извращений тупо на sql, т.к. к примеру, связку c# и sql уже опробовал и огорчился. Что нужно: все что угодно, что реально поможет ускорить выполнение простого кода обработки !большого объема записей. А именно: сначала нужно сформировать табличку - массив числовых значений от 0.0000000000000000 до 0.9999999999999999. Не придумал и не нашел ничего быстрее чем:
У товарища "BegemotX2" -
Вопрос, КАК?! Хочу также, имхо на i3-2350m, 8.00Gb максимум выжимается 3 млн записей в час, а чем дальше в лес... ну например тут: 0.0000000130075191 - со скоростями, уже все стало "не очень"... быстрее сцеплять таблицу основного массива с временно создаваемой таблицей на 50 млн. строк.. Посоветуйте пжл., что нибудь от головы. Ибо, мне еще пригодится (в последующем) над этой таблицей, проводить update всех строк, с конвертацией decimal (17,16) в varchar (29), по причине того, что последовательность decimal (17,16) в моем случае "переменная". корень 2008 r2 Спасибо. |
||||
|
|||||
Правила форума "MS SQL" | |
|
Запрещается! Публиковать ссылки и обсуждать взлом чего бы то ни было.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, Akina. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | MS SQL Server | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |