Ваша реклама могла б бути тут!
1 млн переглядів на місяць!
Google Page Rank: 5

C# + MySQL или ткните носом...

🟠 13:58 БЕЗКОШТОВНА ЕВАКУАЦІЯПросимо терміново евакуюватися із зони бойових дій або небезпечної території Харківської області. Цілодобова БЕЗКОШТОВНА гаряча лінія з питань евакуації цивільного населення – 0800339291#Харківський_район
Статус: Offline
Реєстрація: 03.09.2007
Повідом.: 1045
  • 🟠 13:58 БЕЗКОШТОВНА ЕВАКУАЦІЯПросимо терміново евакуюватися із зони бойових дій або небезпечної території Харківської області. Цілодобова БЕЗКОШТОВНА гаряча лінія з питань евакуації цивільного населення – 0800339291#Харківський_район
  • #1
C# + MySQL или ткните носом...

Задача: перегнать данные из текста в базу МуСКЛ

Преамбула:

Базу создаю, формирую массив записей.
Запись имеет след поля:ДатаВремя, UInt16, UInt16, 32x(Float, UInt16) - дабы донести до Вас объемы данных...
Сейчас записей в массиве получаю 65000, дальше - больше...

Реализовал 2 способа записи:
1. создаю базу, таблицу -> подключаюсь к базе -> перебираю в цикле массив записей и добавляю данные в базу построчно командой INSERT.

2. средствами DataSet и DataAdapter. создаю базу, таблицу -> подключаюсь к базе -> читаю таблицу, заполняю ее -> записываю ее в базу

Вопрос:
оба метода работают крайне медленно, на мой взгляд. скорость записи - порядка 3000 записей в минуту...так как я с базами никогда не работал - пеняю на себя, что что-то сделал не так + сравнить не с чем (опыта нет)...ткните носом, плз, что делаю не так или в какую сторону копать.
 
  • 🟠 13:58 БЕЗКОШТОВНА ЕВАКУАЦІЯПросимо терміново евакуюватися із зони бойових дій або небезпечної території Харківської області. Цілодобова БЕЗКОШТОВНА гаряча лінія з питань евакуації цивільного населення – 0800339291#Харківський_район
  • #2
если у тебя задача стоит единовразово перегнать данные в базу, лучше сделать иначе:
создать таблицу без индексов.
средствами с# создать текстовый файлик (напр. dump.sql), в который кидать sql запросы.
в конец файла дописать запрос добавления индекса.
между каждыми запросами, естественно нужно ставить ;

затем, в самой программе выполнить "mysql -uroot -ppass databasename < data.sql"

как выполнять - можно в инете поискать. к примеру -
Тільки зареєстровані користувачі бачать весь контент у цьому розділі
 
  • 🟠 13:58 БЕЗКОШТОВНА ЕВАКУАЦІЯПросимо терміново евакуюватися із зони бойових дій або небезпечної території Харківської області. Цілодобова БЕЗКОШТОВНА гаряча лінія з питань евакуації цивільного населення – 0800339291#Харківський_район
  • #3
спасибо Sergie Blues, zansul ткнули, куда надо.

пока оставил 2 варианта, как и было (см. пост №1) с учетом изменений:
1. переделал под BULK INSERT. формирую мегОстроку на 1000 записей -> пишу в базу
65300 записей пишутся в базу за 17 секунд.

2. оставил, если нужно будет что-нибудь делать базой (в плане редактирования) средствами C#. процедуру записи переделал с использованием транзакции.
65300 записей пишутся в базу за 56 секунд.

тему не закрываю, может кто добавить что-нибудь захочет :)
 
  • 🟠 13:58 БЕЗКОШТОВНА ЕВАКУАЦІЯПросимо терміново евакуюватися із зони бойових дій або небезпечної території Харківської області. Цілодобова БЕЗКОШТОВНА гаряча лінія з питань евакуації цивільного населення – 0800339291#Харківський_район
  • #4
По-моему,лучше средствами C# сделать из txt файла csv файл, а из него импортировать данные в mysql командой load data infile:
Тільки зареєстровані користувачі бачать весь контент у цьому розділі

У меня 50000 записей импортировались секунд 5 на Celeron 1.2GHz/384MB RAM.
Если надо, завтра могу скинуть точный синтаксис.
 
  • 🟠 13:58 БЕЗКОШТОВНА ЕВАКУАЦІЯПросимо терміново евакуюватися із зони бойових дій або небезпечної території Харківської області. Цілодобова БЕЗКОШТОВНА гаряча лінія з питань евакуації цивільного населення – 0800339291#Харківський_район
  • #5
По-моему,лучше средствами C# сделать из txt файла csv файл, а из него импортировать данные в mysql командой load data infile:
Тільки зареєстровані користувачі бачать весь контент у цьому розділі

У меня 50000 записей импортировались секунд 5 на Celeron 1.2GHz/384MB RAM.
Если надо, завтра могу скинуть точный синтаксис.

спасибо. интересно. попробую реализовать. Сейчас смущает только то, что надо проводить доп манипуляции с исходным csv файлом. например, в файле присутствует только время, дата кодируется в имени файла; столбцу в базе типа float могут соответствовать строковые данные в случае ошибки...
 
  • 🟠 13:58 БЕЗКОШТОВНА ЕВАКУАЦІЯПросимо терміново евакуюватися із зони бойових дій або небезпечної території Харківської області. Цілодобова БЕЗКОШТОВНА гаряча лінія з питань евакуації цивільного населення – 0800339291#Харківський_район
  • #6
Стандартный мускульный Квери Браузер поддерживает импорт данных по регуляркам. Так что даже делать ничего не надо - рисуй регулярку и импорти как есть.
 
  • 🟠 13:58 БЕЗКОШТОВНА ЕВАКУАЦІЯПросимо терміново евакуюватися із зони бойових дій або небезпечної території Харківської області. Цілодобова БЕЗКОШТОВНА гаряча лінія з питань евакуації цивільного населення – 0800339291#Харківський_район
  • #7
как отметил dmitriy_k, действительно, лутше сделать текстовый файлик, а потом залить в таблицу чем нибуть таким.
BULK INSERT [tab]
FROM 'D:\temp.txt'
WITH
(
CODEPAGE = 'ACP',
DATAFILETYPE = 'char',
FIRSTROW = 1,
KEEPNULLS,
FIELDTERMINATOR = '\t',
ROWTERMINATOR = '\n',
TABLOCK
)
Иногда редактирование больших таблиц, занимает больше времени, чем просто её "перелить"..
Дабы донести размер таблиц, с которыми я работаю, это десяток таблиц от миллиона до миллиарда запесей..
 
Назад
Зверху Знизу