Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2016.03.13;
Скачать: [xml.tar.bz2];

Вниз

Быстрый поиск комбинации строк в массиве   Найти похожие ветки 

 
MsGuns ©   (2015-05-25 12:49) [40]

>Павел Калугин ©   (25.05.15 07:51) [35]
>Я бы рекомендовал добавить три поля в которых держать отдельно фамилию имя и отчество в верхнем регистре и очищенных от "мусора". Мусором кроме Е признал бы И Й пробелы, дефисы запятые и т. д.
Это позволило бы эффективнее искать, к примеру,  по имени и фамилии без отчества

Невнимательно читаешь. Юра в самом начале сказал, что база - чужая.
Кроме того, тебе, как опытному разработчику, нельзя не знать, что недостаточно просто "исправить" ошибки в базе РАЗОВО, надо еще менять бизнес-правила и, соответственно, политику пользовательских приложений, через которые в базу добавляется информация. А это уже совсем иная "опера".


 
MsGuns ©   (2015-05-25 12:53) [41]

Немного из личного опыта. Когда-то пришлось делать системку, где была база населения. На момент, когда я приступил к работе, в имеющейся БД было порядка 2 млн. записей. База была на фоксе. Я ее перетаскивал в Paradox.
Жутчайшие тормоза при работе прекратились лишь тогда, когда я ввел доп.поле-ключ - инициалы.


 
Ega23 ©   (2015-05-25 13:06) [42]


>  База была на фоксе. Я ее перетаскивал в Paradox.


Вот на этом месте завис. Даже не знаю, что сказать.


 
кгшзх ©   (2015-05-25 13:07) [43]

так это поди было еще при андропове


 
Ega23 ©   (2015-05-25 13:13) [44]

Я не большой спец по обоим, но перетаск данных из фокса в парадокс мне кажется удивительным при любой власти.


 
junglecat ©   (2015-05-25 13:26) [45]

были времена, когда и фокс и парадокс считались прогрессивными субд. Ну типа как сейчас DB2


 
Юрий Зотов ©   (2015-05-25 13:36) [46]

> Дмитрий С ©   (25.05.15 11:10) [38]

> завести поле с хешем фамилии и имени в таблице и индексировать его.

Дык... а я что сделал?


 
Ega23 ©   (2015-05-25 14:03) [47]


>  фокс и парадокс считались прогрессивными субд


ИМХО, фокс всегда был "прогрессивнее" парадокса.


 
Павел Калугин ©   (2015-05-25 15:51) [48]

Юрий Cергеич, один вариант привел - нет отчетсва.
Второй - когда имя и фамилию перепутали полями или при вводе данных или при поиске. По отдельным полям такое можно выловить "комбинацией"
from t_Pers as t
where ((t.fio = @fio) or (t.name = @fio) )and ((t.name = @name)or (t.fio = @name))
Если поле одно то придется уже по подстроке сравнивать, что опять же будет очень долго.

Ну и правильно напомнили, обвесить придется табличку триггером, который это поле/поля заполняет.  Иначе вся прелесть пропадет.


 
MsGuns ©   (2015-05-25 17:25) [49]

>ИМХО, фокс всегда был "прогрессивнее" парадокса.

Посмеялсо :)


 
Юрий Зотов ©   (2015-05-26 00:40) [50]

Блин. Рано радовался. Отменили доп. поле и индекс по нему. Аргумент один - не нравится. И все аргументы "за" перед ним бессильны.

Бред какой-то.


 
Ega23 ©   (2015-05-26 01:11) [51]


>  Отменили доп. поле и индекс по нему. Аргумент один - не
> нравится.


Сделай доп.таблицу "один к одному", уже в ней - это самое поле. Может так "понравится".


 
Jeer ©   (2015-05-26 01:26) [52]

>Юрий Зотов

"Да пни ты их по яйцам" (С)


 
Юрий Зотов ©   (2015-05-26 01:42) [53]

> Ega23 ©   (26.05.15 01:11) [51]

Настаивают вот на чем - засосать всю таблицу (где миллион записей) в память и делать поиск на клиенте. То есть, как раз то, что я обозначил в сабже. Объясняю - не хватит памяти. Не верят. Ок, прямо на глазах внедряю засос всей таблицы в код и запускаю. Получаю, естественно, Out of memory. Убедились. Но говорят - тогда грузи эту таблицу кусками. Объясняю - скорость упадет на порядок - то есть придем к тем же 50 минутам, что и сейчас (в лучшем случае). Снова не верят. Я офигеваю, дорогая редакция. Вместо того, чтобы использовать простое, документированное, гарантированно работающее решение и уже отлаженный код, предлагают изобрести велосипед с квадратными колесами, а код поломать и отлаживать его по новой.

Блин, и че я переживаю? Забить болт и делать, как просят. Я предупредил, что из этого получится? Предупредил. Ну и получайте, что хотели. Только претензии потом сами себе предъявляйте.


 
Сергей Суровцев ©   (2015-05-26 01:44) [54]

>Юрий Зотов ©   (26.05.15 00:40) [50]
>Блин. Рано радовался. Отменили доп. поле и индекс по нему. Аргумент один - не нравится. И все аргументы "за" перед ним бессильны.

Жестко 2 варианта:
1) есть поле и 5 минут
2) нет поля и 50 минут.

"7 целых шапок из овцы не выкроишь никак" (с)


 
Jeer ©   (2015-05-26 01:49) [55]

>Настаивают вот на чем

Я давно выбрал вариант, что настаиваю я - профи в том, в чем и сомнений нет.


 
Юрий Зотов ©   (2015-05-26 01:52) [56]

> Сергей Суровцев ©   (26.05.15 01:44) [54]

Один спец считает, что 7 шапок из овцы - запросто. И даже решил показать, как это делается, написал код. Получил, естественно, все то же out of memory. После чего сказал, что это мой код глючит.


 
Сергей Суровцев ©   (2015-05-26 01:57) [57]

А если разделить задачу? Сначала выборка по фамилии, а уже из этого набора поиск по имени и отчеству?


 
Сергей Суровцев ©   (2015-05-26 02:00) [58]

>Юрий Зотов ©   (26.05.15 01:52) [56]
>Один спец считает, что 7 шапок из овцы - запросто. И даже решил показать, как это делается, написал код.

Наблюдал таких. Сначала громко орут и матерят Билли, Win, язык прог. А потом тихо бормочут под нос "как же это я это пропустил..."


 
Юрий Зотов ©   (2015-05-26 02:09) [59]

> Сергей Суровцев ©   (26.05.15 01:57) [57]

Так суть проблемы не в этом. Главный вопрос - где искать, на сервере или на клиенте. Если на сервере (как сейчас и как нормальные люди делают) - то да, либо поле есть (и тогда 5 минут), либо поля нет (и тогда 50 минут). А если на клиенте, то идет нехватка памяти и чтобы ее избежать нужен какой извращенный алгоритм. Чесать левое ухо правой рукой через голову (а точнее - через другое место). Причем совсем не факт, что этот алгоритм даст выигрыш в скорости. Скорее всего, не даст и все потуги окажутся напрасными.


 
Сергей Суровцев ©   (2015-05-26 02:16) [60]

>Юрий Зотов ©
>Записей в массиве порядка миллиона.

Если я правильно понял, то миллион это ВСЕ фамилии. Если вытащить на клиента 1 фамилию, то выборка будет порядка на 2-3 меньше. А уже ее копать до совпадения массивом. Тогда лишнее поле в базе не понадобится. Основной отсев на сервере, добить на клиенте.


 
Германн ©   (2015-05-26 02:48) [61]

Удалено модератором


 
Kerk ©   (2015-05-26 02:54) [62]

Сгенерировал хэш-таблицу с миллионом записей (всякий мусор вместо фамилий/имен/отчеств). Сделал к ней 10000 обращений. Выполняется быстрее, чем за секунду. Без каких-то оптимизаций, просто в лоб решение.

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

Сделать select по фамилии, например, как предыдущий оратор советует, а потом уже хэш-таблицу. Или даже по первой букве фамилии. Если база данных захвачена павианами, то это скорее всего единственный вариант.


 
Kerk ©   (2015-05-26 02:59) [63]

Проблемы с памятью могут еще быть вызваны ее фрагментацией. Можно в эту сторону покопать. Потому что чисто по объему миллион коротких строчек - это вообще ни о чем.


 
Павел Калугин ©   (2015-05-26 07:22) [64]

Всю таблицу на  клиента тащить смысла нет достаточно Id  и фио.  Но я подозреваю что там не миллион записей, а восемьдесят миллионов ;) потому 3*255*80000000 на какого клиента не хватит если не писать это порциями в файл ну и так долее. По сути реализовать локальную СУБД ради одного запроса.
Канал связи клиент-сервер безразмерный и моментальный изобрели уже?

Юрий Сергеич а проверь ка сколько на сервере будет идти инсерт во временную индексированную таблицу этих полей Id и очищенное фио.
Попутно глянь насколько производительность сервера просядет.
Любые телодвижения с клиентом априори будут медленнее.
Выдернуть 80 кусков на 80 клиентов во каждом осуществить поиск и потом результат обработать к выдаче врятли получиться. И не быстрее так уж точно.


 
Юрий Зотов ©   (2015-05-26 08:35) [65]

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


 
Павел Калугин ©   (2015-05-26 09:19) [66]

Юрий Сергеевич, а хранимых процедур в DB2 разве нетути?
Временная таблица "живет" только на время сессии,  как переменная. (ну или переменная табличного типа, если такая есть)
Так что "табу" на это не распространяется ну никак...


 
Юрий Зотов ©   (2015-05-26 09:40) [67]

> Павел Калугин ©   (26.05.15 09:19) [66]

Я в курсе. Но все равно низзя. Считай, что доступен только DML.


 
D.N. Polezhaev ©   (2015-05-26 09:41) [68]

А какие проблемы с памятью? Миллион фамилий по 12 букв в unicode это 22МБ данных. Ну с именами отчествами меньше , но всяко меньше 100МБ.

Не понимаю как у профи хватает нервов с идиотами работать )


 
Юрий Зотов ©   (2015-05-26 09:46) [69]

> хранимых процедур в DB2 разве нетути?

В DB2 - есть. А в базе- нет. Почему - не знаю. Нет - и все. Запрещены.


 
junglecat ©   (2015-05-26 09:47) [70]

Удалено модератором


 
Юрий Зотов ©   (2015-05-26 09:54) [71]

> D.N. Polezhaev ©   (26.05.15 09:41) [68]

> А какие проблемы с памятью?


Да пустяк - при выполнении SELECT где-то в недрах сервера приложений возникает исключение Out of memory.
:o)


 
sniknik ©   (2015-05-26 10:20) [72]

> Юрий Зотов ©   (26.05.15 00:40) [50]
> Блин. Рано радовался. Отменили доп. поле и индекс по нему. Аргумент один - не нравится. И все аргументы "за" перед ним бессильны.
>
> Бред какой-то.
"родной" конторой повеяло... с таким "убойным" аргументом. ничего не докажешь (у меня не получалось).

> Блин, и че я переживаю? Забить болт и делать, как просят. Я предупредил, что из этого получится? Предупредил. Ну и получайте, что хотели. Только претензии потом сами себе предъявляйте.
а вот тут нет, претензии будут только к тебе, как к исполнителю... я как то пробовал, доходило, прямой письменный приказ выбить с а ля "делать ТАК", ничем не помог, в итоге "мы имели ввиду так, но чтобы правильно работало" (т.е. с неправильной логикой/действиями по ней, но с правильным результатом) и "если не знаешь как правильно спроси у кого нибудь".

лучше вообще не делать. ИМХО. типа "либо делаю по своему, либо кто нибудь другой, ну вот хотя бы тот кто за это решение".


 
Kerk ©   (2015-05-26 11:31) [73]


> Да пустяк - при выполнении SELECT где-то в недрах сервера
> приложений возникает исключение Out of memory

Почему бы причину не выяснить?


 
D.N. Polezhaev ©   (2015-05-26 11:45) [74]

Тогда я вообще не понимаю.

По условиям задачи в памяти лежат два списка, их нужно соединить по условию равенства.

Как эти списки могут лежать в памяти, если оказалось, что сервер приложений не может прокачать такой объем данных?

Значит на клиенте задачу решить нельзя из-за не возможности получить сырые данные.

На бд задачу тоже нельзя решить поскольку не дают оптимизировать бд.

Ну и что теперь - всем спасибо все свободны, ветка какая то ни о чем...


 
Юрий Зотов ©   (2015-05-26 11:47) [75]

> Kerk ©   (26.05.15 11:31) [73]

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


 
Kerk ©   (2015-05-26 11:48) [76]


> D.N. Polezhaev ©   (26.05.15 11:45) [74]

Дык первый раз что ли :)


 
Юрий Зотов ©   (2015-05-26 11:51) [77]

> Как эти списки могут лежать в памяти, если оказалось, что сервер
> приложений не может прокачать такой объем данных?

Допустим, каким-то волшебным способом мы это сделали. Тогда задача сводится к быстрому поиску ФИО. Быстрее, чем это сделал бы сервер БД.

Сабж об этом.


 
Ega23 ©   (2015-05-26 11:51) [78]

я тут вот что хочу сказать. Я не верю в 50 минут тупо в лоб без индексирования фулл-сканом на миллионе записей. Даже с upper и replace.
Такие дела.


 
sniknik ©   (2015-05-26 11:53) [79]

> Тогда я вообще не понимаю.
но чтоб к утру было сделано!

стандартная ситуация. :)


 
Юрий Зотов ©   (2015-05-26 11:55) [80]

> Ega23 ©   (26.05.15 11:51) [78]

Не "на миллионе записей", а 10 тыс раз на миллионе записей.



Страницы: 1 2 3 4 5 6 7 вся ветка

Форум: "Прочее";
Текущий архив: 2016.03.13;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.63 MB
Время: 0.015 c
15-1435951465
Денис Комаров
2015-07-03 22:24
2016.03.13
Возможности MS Access


8-1205002273
farrex
2008-03-08 21:51
2016.03.13
Эллипс под углом.


2-1408972087
DQ
2014-08-25 17:08
2016.03.13
Перехват и подмена файлов при скачивании


1-1335169455
lilyalm
2012-04-23 12:24
2016.03.13
Динамическое создание формы


15-1435689210
SKIPtr
2015-06-30 21:33
2016.03.13
поздравляю всех с 31 июня





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский