Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Что делать с большими таблицами??? / 18 сообщений из 18, страница 1 из 1
18.11.2004, 09:06
    #32788263
alex3399
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что делать с большими таблицами???
Доброго всем времени суток!
У меня есть таблицы 100тыс., 50тыс., 28тыс., причем это все справочники, т.е юзер должен из них выбирать, значит они должны быть доступны после загрузки формы. Так вот DataAdapter.Fill по этим таблицам идет о-очень долго, порядка 10-15мин. Что делать??? Может кто сталкивался, подскажите.
...
Рейтинг: 0 / 0
18.11.2004, 09:50
    #32788340
Дудкин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что делать с большими таблицами???
Я как-то делал подобное. В поле юзер начинает колотить что ему надо, и как только он вбивает третий символ открывается справочник с запросом like...

моим юзерам понравилось
...
Рейтинг: 0 / 0
18.11.2004, 11:49
    #32788723
Лиман Артём
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что делать с большими таблицами???
alex3399Доброго всем времени суток!
У меня есть таблицы 100тыс., 50тыс., 28тыс., причем это все справочники, т.е юзер должен из них выбирать, значит они должны быть доступны после загрузки формы. Так вот DataAdapter.Fill по этим таблицам идет о-очень долго, порядка 10-15мин. Что делать??? Может кто сталкивался, подскажите.
не думаю, что лузеру нужно видеть все 100тыс. строк, что б выбрать только одну...
можна список ограничивать либо обязательным условием(where) либо/и орагнизовывать постраничное отображение (как в инете)
почитать об этом можна здесь
...
Рейтинг: 0 / 0
18.11.2004, 15:59
    #32789526
Hummer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что делать с большими таблицами???
Либо организоваваем вывод формы для выбора, которая берёт первые N записей из справочника и имеет текстовое поле с вводом - дальше происходит запрос с лайком - практически так, как написал Дудкин.
...
Рейтинг: 0 / 0
18.11.2004, 16:59
    #32789777
Лиман Артём
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что делать с большими таблицами???
HummerЛибо организоваваем вывод формы для выбора, которая берёт первые N записей из справочника и имеет текстовое поле с вводом - дальше происходит запрос с лайком - практически так, как написал Дудкин.
ну так это тоже самое, что и предлагалось - выводить не все а некоторую часть с возможностю просмотреть следующие n строк
...
Рейтинг: 0 / 0
19.11.2004, 06:34
    #32790349
alex3399
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что делать с большими таблицами???
Вобщем я так думал сделать, но это хорошо пока не нужно делать сортировки. Скажем есть справочник материалов, сортируем его по наименованию или коду ОКП. Для поиска по первым символам подходит LIKE, но тогда как определить, с учетом сортировки, какая запись находится перед первой для того чтобы можно было осуществлять навигацию? Можно конечно создать несколько вьюшек с нужными сортировками и переключаться между ними по необходимости. Но как-то все это нагоняет тоску... Может поискать другую среду для реализации этой задачи?
...
Рейтинг: 0 / 0
19.11.2004, 10:45
    #32790699
vladgrig
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что делать с большими таблицами???
Конечно, мне как пользователю, тоже стало бы грустно, если бы я не увидел все 100 тыс записей из всего справочника, запуская его. Или, 50 тыс. вводя в поиск первые два-три символа одного значения .
Идея совсем глупая, и не звучала в этом топике ниразу - сделай максимальное количество полей для выборки по запросу и заставь пользователя заполнять их (а потом кнопочку с выполнением запроса). Может по запросу нибудет ни одной строки??? Или всего, например, пять...
...
Рейтинг: 0 / 0
19.11.2004, 11:14
    #32790775
Sa
Sa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что делать с большими таблицами???
Может поискать другую среду для реализации этой задачи?

В любой среде показывать 100 тысяч записей клиенту - плохо. Поддерживаю вариант с максимально точным поиском

Код: plaintext
 uid  =  S a
...
Рейтинг: 0 / 0
19.11.2004, 11:36
    #32790844
HitchHicker
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что делать с большими таблицами???
Я так понял, что данные нужно извлечь только для чтения.
Поэтому используй DataReader, который быстрее в ХХ раз.


Код: plaintext
1.
2.
Do while myreader.read 
' чтение
loop
...
Рейтинг: 0 / 0
23.11.2004, 07:00
    #32795125
alex3399
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что делать с большими таблицами???
Спасибо всем.
Пришлось все-таки писать страничную обработку(.
...
Рейтинг: 0 / 0
23.11.2004, 08:33
    #32795176
Дудкин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что делать с большими таблицами???
Лично мне бы, если я был бы юзером, было бы лениво перелистывая странички искать нужную запись. Но это имхо...
...
Рейтинг: 0 / 0
23.11.2004, 09:32
    #32795234
vladgrig
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что делать с большими таблицами???
Есть подозрение, что объективными причинами, по которым автор отказался от выполнения точного запроса может быть сложность с его написанием. По этому привожу пример (уточню - это всего лишь пример, то есть возможный вариант, а не руководство к действию ):
Код: 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.
    Private Sub Search_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Search.Click

        Dim a As String = search1.Text
        Dim b As String = search2.Text
        Dim c As String = search3.Text
        Dim d As String = search4.Text

        If a = "" And b = "" And c = "" And d = "" Then
        
        '************************
        'как вариант, более подходящий к топику
        'If a = "" Or b = "" Or c = "" Or d = "" Then
        'MsgBox("Fill all search text box")
        '************************
         
            MsgBox("Insert Criteria")
            Exit Sub
        Else
            If a <> "" Then a = " AND (osnova_table.col1 LIKE '" & search1.Text & "%')"
            If b <> "" Then b = " AND (osnova_table.col2 LIKE '" & search2.Text & "%')"
            If c <> "" Then c = " AND (osnova_table.col3 = '" & search3.Text & "')"
            If d <> "" Then d = " AND (osnova_table.col4 = '" & search4.Text & "')"

            Dim allunit As String = a & b & c & d
            If allunit.StartsWith(" AND") Then allunit = allunit.Remove( 0 ,  4 )

            OleDbDataAdapter1.SelectCommand.CommandText = "SELECT * FROM osnova_table WHERE " & allunit

        DataSet1.Clear()
        OleDbDataAdapter1.Fill(DataSet1.osnova_table)
        DataGrid1.CaptionText = "Search Table Count - " & DataSet1.osnova_table.Count

        End If

    End Sub

P.S. Извините, если что не так - просто поумничать захотелось
...
Рейтинг: 0 / 0
23.11.2004, 11:11
    #32795438
Алексей Р.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что делать с большими таблицами???
Еще предложу такой вариант выборки.
Т.к. для большущего справочника это наверное актуально

и если искать только по начальным буквам то легко можно не найти нужную запись и ввести повторную, со всеми вытекающими последствиями...

Создать специализированную форму для поиска по приближенному написанию,
которая учитывала бы ошибки ввода.
(пропуск букв, лишние буквы, перестановка, похожие анг-рус, ноль вместо буквы о, похожее звучание, неударные гласные и тд.)

Например вводим для поиска трест

Выводится примерно такой список

ООО третс "Дорожник"
Трест "Дружба"


Ищем Иванов

Получаем
Ифанов
Иваноф
Ианов
и т.д.
...
Рейтинг: 0 / 0
23.11.2004, 14:36
    #32796095
vladgrig
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что делать с большими таблицами???
На самом деле, я сталкивался с такими таблицами (ну, может поменьше), и вместо текстовых боксов ставил комбо (без вылетающего списка (DropDownStyle=Simple - внешне похож будет на текст бокс) + автоподстановка). К чему это я ... а, вспомнил, набивал я его значениями из столбца таблицы ридером - довольно живо получалось - так вот по первым символам введённым пользователем срабатывала автоподстановка и становилось видно - есть такое значение в таблице или смысл забивать его в критерий поиска напрочь отсутствует... Но, это моё имхо...
...
Рейтинг: 0 / 0
26.11.2004, 12:16
    #32801212
alex3399
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что делать с большими таблицами???
я хочу немного пояснить: это справочник Материалов, он достался в наследство от старой системы, практически никак не структурирован, там есть код, наименование, и код ОКП. По сути это просто большой набор г..., но для совместимости он нужен.
У меня есть такой класс универсальный, для работы с любыми справочниками, даешь ему тайблстайл, датасет и всякие мелочи, а он умеет искать по любой колонке и возвращает то что выбрал юзер, вот мне и хотелось сохранить универсальность, но ...
А спрашивал я в надежде на то, что может у датаадатера или еще где-то есть что-то вроде подкачки данных по мере надобности, ведь тот же интерпрайз менеджер у SQL таблицу подкачивает по мере ее пролистывания.
...
Рейтинг: 0 / 0
26.11.2004, 12:27
    #32801246
Sa
Sa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что делать с большими таблицами???
А спрашивал я в надежде на то, что может у датаадатера или еще где-то есть что-то вроде подкачки данных по мере надобности, ведь тот же интерпрайз менеджер у SQL таблицу подкачивает по мере ее пролистывания.


К сожалению, а может и к счастью DataAdapter не умеет реализовывать правильно постраничную выборку.

Код: plaintext
 uid  =  S a
...
Рейтинг: 0 / 0
26.11.2004, 12:58
    #32801329
Лиман Артём
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что делать с большими таблицами???
мелкософт идет в сторону так называемого толстого клиента, что в переводе означает держать все данные на клиенте не держа постоянного соединения с БД (чего требовалось для старенького ADO)
...
Рейтинг: 0 / 0
26.11.2004, 13:27
    #32801403
Alexey Kudinov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что делать с большими таблицами???
Лиман Артёммелкософт идет в сторону так называемого толстого клиента, что в переводе означает держать все данные на клиенте не держа постоянного соединения с БД (чего требовалось для старенького ADO) строго говоря и в "стареньком ADO" никто не запрещал создавать отсоединеные рекордсеты.
Насчет куда идет microsoft - тоже спорный вопрос.

По subj - я поддерживаю вариант с поиском по (например) like. Хоть это и создает большое количество round trip-ов на сервер, зато относительно легко реализуемо и надежно работает. А общий объем перетягиваемых по сети данных может быть и меньше, чем при постраничной выборке.
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Что делать с большими таблицами??? / 18 сообщений из 18, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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