powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Выгрузка из текст. файла в базу access: 8000 строк 47 минут?!
10 сообщений из 10, страница 1 из 1
Выгрузка из текст. файла в базу access: 8000 строк 47 минут?!
    #33730231
Фотография skyzmei
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет!!!

Имею:
1.

текстовый файл, ~ 8000 строк.
Пример строк(2-е строки):

------------------------txt-----------------

"6153","..........VIPER (Solingen)","..Маникюрные наборы Solingen VIPER","sv Набор педикюрный SET-1 (4-предмета)"

"6453","..........VIPER (Solingen)","..Маникюрные наборы Solingen VIPER","sv Набор педикюрный SET-45 (4-предмета)"

--------------------------------------------


2.

Базу ACCESS :

Три связанные таблицы.
Для раздела,для подраздела, для наименований товара.


------------------

Все ничего, вроде работает нормально,
но на выгрузку строк из файла нужно 47 минут!!!

В чем проблема???

Код выгрузки:

Do While Not ts.AtEndOfStream
MyArray = Split(ts.ReadLine, razdelitel_for_split)

id = Replace(Replace(MyArray(0), Chr(34), ""), ".", "")
count = count + 1


If MyArray.Length = 4 Then
lavel1 = Replace(Replace(MyArray(1), Chr(34), ""), ".", "")
lavel2 = Replace(Replace(MyArray(1), Chr(34), ""), ".", "")
lavel3 = Replace(Replace(MyArray(2), Chr(34), ""), ".", "")
End If
If MyArray.Length = 5 Then
lavel1 = Replace(Replace(MyArray(1), Chr(34), ""), ".", "")
lavel2 = Replace(Replace(MyArray(2), Chr(34), ""), ".", "")
lavel3 = Replace(MyArray(3), Chr(34), "")
End If


If n.FillBy(lavel1.ToString).HasValue = False Then
n.Insert(lavel1.ToString, True)
q1 = n.FillBy(lavel1.ToString).Value.ToString
Else
q1 = n.FillBy(lavel1.ToString).Value.ToString
n.UpdateQuery(lavel1.ToString, True, q1)
End If

If n2.FillBy(lavel2.ToString, q1.ToString).HasValue = False Then
n2.Insert(q1.ToString, lavel2, True)
q2 = n2.FillBy(lavel2.ToString, q1.ToString).Value.ToString
Else
q2 = n2.FillBy(lavel2.ToString, q1.ToString).Value.ToString
n2.Update(q1.ToString, lavel2, True, q2.ToString)
End If
'Здесь автоматически можно проставлять новинки при добавлении записи
If n3.FillBy_naim3_id(id.ToString, q2.ToString).HasValue = False Then
n3.Insert(q2.ToString, id.ToString, lavel3.ToString, False, True)
q3 = n3.FillBy_naim3_id(id.ToString, q2.ToString).Value.ToString
Else
q3 = n3.FillBy_naim3_id(id.ToString, q2.ToString).Value.ToString
n3.Update(q2.ToString, id.ToString, lavel3.ToString, False, True, q3.ToString)
End If

MyArray = Nothing
Loop
...
Рейтинг: 0 / 0
Выгрузка из текст. файла в базу access: 8000 строк 47 минут?!
    #33730482
Фотография vladgrig
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторВсе ничего, вроде работает нормально,
но на выгрузку строк из файла нужно 47 минут!!!

В чем проблема???

ну как в чём? наверное код не очень ;) у меня например в Win-приложении для такой задачи уходит минуты 2-3
...
Рейтинг: 0 / 0
Выгрузка из текст. файла в базу access: 8000 строк 47 минут?!
    #33730518
Фотография skyzmei
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vladgrig авторВсе ничего, вроде работает нормально,
но на выгрузку строк из файла нужно 47 минут!!!

В чем проблема???

ну как в чём? наверное код не очень ;) у меня например в Win-приложении для такой задачи уходит минуты 2-3

А что в коде?

Какие нибудь предложения по оптимизации?
...
Рейтинг: 0 / 0
Выгрузка из текст. файла в базу access: 8000 строк 47 минут?!
    #33730526
Фотография skyzmei
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Использую dataset...

запросы простые....
А насчет разбития строки, вроде всегда так делал..
...
Рейтинг: 0 / 0
Выгрузка из текст. файла в базу access: 8000 строк 47 минут?!
    #33732571
Фотография skyzmei
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
;-(
...
Рейтинг: 0 / 0
Выгрузка из текст. файла в базу access: 8000 строк 47 минут?!
    #33732967
Фотография vladgrig
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
If n.FillBy(lavel1.ToString).HasValue = False Then
n.Insert(lavel1.ToString, True)
q1 = n.FillBy(lavel1.ToString).Value.ToString
Else
q1 = n.FillBy(lavel1.ToString).Value.ToString
n.UpdateQuery(lavel1.ToString, True, q1)
End If

If n2.FillBy(lavel2.ToString, q1.ToString).HasValue = False Then
n2.Insert(q1.ToString, lavel2, True)
q2 = n2.FillBy(lavel2.ToString, q1.ToString).Value.ToString
Else
q2 = n2.FillBy(lavel2.ToString, q1.ToString).Value.ToString
n2.Update(q1.ToString, lavel2, True, q2.ToString)
End If
если это то очём я думаю... ;) то 47 мин - это не так уже и много... хотя могу и ошибаться... ;)
расскажи что это такое и для чего?
...
Рейтинг: 0 / 0
Выгрузка из текст. файла в базу access: 8000 строк 47 минут?!
    #33733164
Фотография skyzmei
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну вобщем есть три таблицы...
Naimenovanie
Структура:
naim_id - Ключевое поле (счетчик)
lavel1 - Текстовое поле для основного раздела
notdeleteafterupdate - boolean, тоесть когда обновляем все записи, ставим галочку, типа удалять не нужно. После занесения записей пользователю выдается список значений из базы, которые не отмечены галочкой.Это говорит о том, что в таблице есть лишние строки, оставшиеся с прошлой загрузки и что их при желании можно удалить.Если не удаляем, то все галочки снимаются...

Связи:
Связь с таблицей Naimenovanie2 по полю naim_id

Запросы:

n.FillBy:
SELECT naim_id FROM naimenovanie WHERE (lavel1 = ?)

n.UpdateQuery:
UPDATE `naimenovanie` SET `lavel1` = ?, `notdeleteafterupdate` = ? WHERE ((`naim_id` = ?))

--------

Naimenovanie2
Структура:
naim2_id - Ключевое поле (счетчик)
naim_id
lavel2 - Текстовое поле для основного раздела
notdeleteafterupdate - boolean,тоже , что и в предыд.

Связи:
Связь с таблицей Naimenovanie3 по полю naim2_id

Запросы:

n2.FillBy:SELECT naim2_id FROM naimenovanie2 WHERE (lavel2 = ?) AND (naim_id = ?)

n2.Update:UPDATE `naimenovanie2` SET `naim_id` = ?, `lavel2` = ?, `notdeleteafterupdate` = ? WHERE ((`naim2_id` = ?))
------


Naimenovanie3
Структура:
naim3_id - Ключевое поле (счетчик)
naim2_id
lavel3 - Текстовое поле для основного раздела
notdeleteafterupdate - boolean,тоже , что и в предыд.
id - id записи из текст. файла
isnew -"новинки" или нет

Запросы:
n3.FillBy_naim3_id:SELECT naim3_id FROM naimenovanie3 WHERE (id = ?) AND (naim2_id = ?)


--------------
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
        Dim n As New DataSet1TableAdapters.naimenovanieTableAdapter
        Dim n2 As New DataSet1TableAdapters.naimenovanie2TableAdapter
        Dim n3 As New DataSet1TableAdapters.naimenovanie3TableAdapter



смотрим, есть ли значение , если нет, то добавляем, если да, то обновляем
           
            if n.FillBy(lavel1.ToString).HasValue = False Then
                n.Insert(lavel1.ToString, True)
                q1 = n.FillBy(lavel1.ToString).Value.ToString
            Else
                q1 = n.FillBy(lavel1.ToString).Value.ToString
                n.UpdateQuery(lavel1.ToString, True, q1)
            End If

 смотрим, есть ли значение , если нет, то добавляем, если да, то обновляем и связываем по значению q1.ToString 

            If n2.FillBy(lavel2.ToString, q1.ToString).HasValue = False Then
                n2.Insert(q1.ToString, lavel2, True)
                q2 = n2.FillBy(lavel2.ToString, q1.ToString).Value.ToString
            Else
                q2 = n2.FillBy(lavel2.ToString, q1.ToString).Value.ToString
                n2.Update(q1.ToString, lavel2, True, q2.ToString)
            End If
            
' смотрим, есть ли значение , если нет, то добавляем, если да, то обновляем и связываем по значению q2.ToString 

            If n3.FillBy_naim3_id(id.ToString, q2.ToString).HasValue = False Then
                n3.Insert(q2.ToString, id.ToString, lavel3.ToString, False, True)
                q3 = n3.FillBy_naim3_id(id.ToString, q2.ToString).Value.ToString
            Else
                q3 = n3.FillBy_naim3_id(id.ToString, q2.ToString).Value.ToString
                n3.Update(q2.ToString, id.ToString, lavel3.ToString, False, True, q3.ToString)
            End If

Ну вроде все....
...
Рейтинг: 0 / 0
Выгрузка из текст. файла в базу access: 8000 строк 47 минут?!
    #33733393
Фотография vladgrig
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну а теперь вдумайся -
сколько по времени должно занимать создать запрос к таблице БД с параметром по твоему значению, вернуть или не вернуть полученную строку и после этого внести или невнести (а то и просто тупо апдейтить уже существующее) значение... и так три раза для каждого значения считанной строки... 8000*3 - вот и посчитай...
P.S. может сделать эти поля в БД уникальными и, просто добавлять значения - пусть сервер сам разбирается надо это значение вносить или нет!!!???
P.P.S. у меня, вроде тоже, пока, всё... ;)
...
Рейтинг: 0 / 0
Выгрузка из текст. файла в базу access: 8000 строк 47 минут?!
    #33733441
Фотография skyzmei
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vladgrigну а теперь вдумайся -
сколько по времени должно занимать создать запрос к таблице БД с параметром по твоему значению, вернуть или не вернуть полученную строку и после этого внести или невнести (а то и просто тупо апдейтить уже существующее) значение... и так три раза для каждого значения считанной строки... 8000*3 - вот и посчитай...
P.S. может сделать эти поля в БД уникальными и, просто добавлять значения - пусть сервер сам разбирается надо это значение вносить или нет!!!???
P.P.S. у меня, вроде тоже, пока, всё... ;)

Ну да!!!! :-)

Конечно же понятно, что число операций большое.
Но мне казалось, что количество затраченного времени
должно быть меньше...

Что касается кода, то вроде ошибок нет.

Мне казалось, что проблема в ACCESS-е.
Чесно говоря на SQL Ser. не пробовал.

...
...
Рейтинг: 0 / 0
Выгрузка из текст. файла в базу access: 8000 строк 47 минут?!
    #33733567
Фотография vladgrig
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторКонечно же понятно, что число операций большое.
Но мне казалось, что количество затраченного времени
должно быть меньше...

пойми одно - не число операций играет роль (хотя это тоже немаловажно)... самое главное, в твоём случае, это глупая выборка из таблиц БД строк по запросу - вот это засада...
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Выгрузка из текст. файла в базу access: 8000 строк 47 минут?!
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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