powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / JDBC необязательные параметры
25 сообщений из 158, страница 5 из 7
JDBC необязательные параметры
    #39702061
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяmaytonПокеж.дай набор данных сделаю демку.

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

Возьми базу данных NorthWind. Она часто публикуется в тексте. И найди в ней "123".

Но конечно хотелось-бы какое-то общее решение. Не для 1 таблички а для всех.
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39702078
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonВ таблице могут быть не-текстовые поля. Числовые. Тоесть если я ищу СТРОКОВЫЙ символ
через LIKE в числовом поле. То это всегда FALSE. Тождественный FALSE. Инвариант.как только дошёл до этого - понял, что с базами ты знаком очень отдалённо.......
на примере mysql
есть таблица
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
CREATE TABLE uhtt.xxx (
  ID int(11) DEFAULT NULL,
  UPCEAN bigint(20) DEFAULT NULL,
  Name varchar(255) DEFAULT NULL,
  CategoryID int(11) DEFAULT NULL,
  CategoryName varchar(150) DEFAULT NULL,
  BrandID int(11) DEFAULT NULL,
  BrandName varchar(100) DEFAULT NULL,
  id_ int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  zz blob GENERATED ALWAYS AS (CONCAT_WS(' ', `Name`, `BrandName`)) VIRTUAL,
  PRIMARY KEY (id_)
)
ENGINE = INNODB,
AUTO_INCREMENT = 2925499,
AVG_ROW_LENGTH = 69,
CHARACTER SET utf8,
COLLATE utf8_general_ci;

ALTER TABLE uhtt.xxx
ADD INDEX IDX_xxx_Name (Name);

ALTER TABLE uhtt.xxx
ADD INDEX IDX_xxx_UPCEAN (UPCEAN);


обрати внимание на поле
UPCEAN bigint(20) DEFAULT NULL,
делаю запрос
Код: sql
1.
2.
3.
4.
SELECT
  xxx.UPCEAN
FROM xxx
WHERE  xxx.UPCEAN LIKE '%121042%'


возвращает
"UPCEAN"121042104381210426216122000121042760012104273012104210444921121042006427031210427590512104247826312104221111211210429312104280009431210428001003121042800483312104280049031210428006433274871210425400832121042546060081210424820008121042482011121042854490001210426909756121042
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39702082
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяесли ты ввёл 2 символа и вываливаешь всё что нашёл этот like- этот объём никому не нужен.
поэтому и не смысла делать фулскан
блин вадя, соберись ;) . тебе известно понятие плана запроса? если ты ищешь по полю, на который не существует индекса, то бд будет делать полный перебор записей, что очень неэффективно, если записей много. в данном случае кол-во символов вообще побоку, а limit ничего радикально не решает, потому как нет никаких гарантий, что в очереди из миллиона строк твои 2 нужные не находятся в самом конце списка или где-то посередине с промежутком в 300-400к.
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39702084
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
такой запрос
Код: sql
1.
2.
3.
4.
5.
6.
SELECT
  xxx.UPCEAN,
  xxx.Name
FROM xxx
WHERE CONCAT_WS(' ', xxx.UPCEAN, xxx.Name) LIKE '%121042%'
AND CONCAT_WS(' ', xxx.UPCEAN, xxx.Name) LIKE '%флом%'


вернёт
"UPCEAN""Name"6909756121042"Фломастеры gmv 12шт gw258-12g"
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39702087
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpashaблин вадя, соберись ;) . тебе известно понятие плана запроса? если ты ищешь по полю, на который не существует индекса, то бд будет делать полный перебор записей, что очень неэффективно, если записей много. в данном случае кол-во символов вообще побоку, а limit ничего радикально не решает, потому как нет никаких гарантий, что в очереди из миллиона строк твои 2 нужные не находятся в самом конце списка или где-то посередине с промежутком в 300-400к.
что бы не быть голословным , сделал такой запрос
Код: sql
1.
2.
3.
4.
5.
SELECT
  xxx.UPCEAN,
  xxx.Name
FROM xxx
WHERE xxx.Name LIKE '%9999999s999999%'


такого в поле однозначно нет
да делает фуллл, но время 1.16сек
для сравнения времени можете почитать 21670315
если ты сможешь предложить более оптимальны поиск - я применю
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39702089
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,

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

Ты решаешь другую задачу где есть 2 ключевых слова для поиска.

Это не моя постановка.
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39702090
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpasha,

да план запроса - сканирует все строки, но реально , при limit 5 будет намного меньше
и время от 0 до 1.1сек.
если ты сделаешь аналогичное на java - будет на много дольше.
тут был недавно топик, где измеряли скорость - так вот .equals на порядок тормознее чем посимвольное сравнение
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39702092
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяда делает фуллл, но время 1.16сек
ну вот, уже сек. что не так уж и мало. умножь кол-во записей на 100, поставь сервер послабее, уменьши памяти и увеличь кол-во пользователей и уже могут начаться жуткие тормоза

вадяесли ты сможешь предложить более оптимальны поиск
я где-то уже выше писал, что по-моему нужно ориентироваться на конкретную задачу при выборе решения. Ну например в postgres (и наверняка много где еще) можно создавать индексы, которыми может воспользоваться движок при поиске по like. Если записей и пользователей совсем жуткое кол-во, а требования по эффективности достаточно строги - могут и сторонние решения понадобится для индексации данных.
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39702094
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonТы вообще не читаешь то что я пишу. Я решаю задачу в рамках 1 интерфейса который я предложил.

Ты решаешь другую задачу где есть 2 ключевых слова для поиска.1 ключевое поле для поиска - это бесполезно.
к примеру есть контора, торгующая моющими средствами - там есть разные мылЫ
одного хозяйственного дофига , если использовать для поиска ключевое слово хоз вывалится вес огромный список мыл + ещё куча того что относится к хозяйству...
но достаточно ввести (к примеру ) вес куска 200 - будет список очень маленький - 1-3 строки
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39702099
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpashaну вот, уже сек. что не так уж и мало. умножь кол-во записей на 100, поставь сервер послабее, уменьши памяти и увеличь кол-во пользователей и уже могут начаться жуткие тормозаэтот метод реально работал с 98 года - на том железе
сколько может быть наименований у торгующей конторы? 100 000 ? 200 000?
ежели 3 000 000 - то она спокойно может вложиться в хорошее железо.

да надо ориентироваться на конкретную задачу - я здесь привожу цифры чтоб можно было ориентироваться хоть на что-то
у меня была база в 28 000 наименований товара - и обычное железо - оценить быстродействие было практически не возможно - величины чисел терялись , практически(повторяюсь) данные вывыливались мгновенно, это с учетом того , что был полный цикл от ввода пользователем в браузере - сервер - субд - браузер...
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39702104
Korcar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяKorcarу меня запроса всего 4, а вопросов у тебя аж 6! чего спрашиваешь то? тебе наверное надо умерить аппетиты)у меня 1 запрос
как ты насчитал 6?
вадяKorcarв общем 4 запроса сделал. надеюсь годно получилось??????
сколько ты знаков вопроса поставил? варианты: 4, 6, другое

ты еще и не читатель
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39702112
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Korcarты еще и не читательу меня все в 1 запросе, ты у меня насчитал 6 запросов, как ты считаешь?
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39702115
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяты у меня насчитал 6 запросов, как ты считаешь?
он намекает, что в твоем сообщении шесть знаков "?" ;)
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39702124
Korcar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадязабыл никЭто как? Слезно попросить ДБ?не помню как в mssql, но в mysql есть Limit n
top n в select
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39702127
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лимит курсора есть почти во всех dbms. Но в данной задаче это ненужное 5 колесо.

Оставьте его в покое.

Подумайте почему в интерфейсе я заложил не List а Iterator в качестве типа возвращаемого значения.

И как это закодить в рамках множества таблиц.
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39702132
Korcar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяKorcarты еще и не читательу меня все в 1 запросе, ты у меня насчитал 6 запросов, как ты считаешь?
6 ВО просов. раскрой глаза
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39702139
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonПодумайте почему в интерфейсе я заложил не List а Iterator в качестве типа возвращаемого значения.лист или итератор - это будет не быстрее чем это сделать в субд.
если есть права - можно получить все данные о субд и по ним построить запрос по поиску нужных данных
записывать в лист или итератор скачанное из субд это не разумно, потому как память требуемую для лист/итератор лусше отдать субд она более правильно будет использовать.


maytonНо в данной задаче это ненужное 5 колесо.как раз в этой задаче и есть в этом ускорение, ограничение на вывод не нужной инфы
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39702142
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Korcarу меня запроса всего 4, а вопросов у тебя аж 6!да не доглядел,
но чем ты похвастался? что 4 запроса вместо 1?
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39702168
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяmaytonНо в данной задаче это ненужное 5 колесо.как раз в этой задаче и есть в этом ускорение, ограничение на вывод не нужной инфы
Если-б ты был DBA как я, то ты сразу-бы понял что задачи полного поиска по like не индексируются
никак и (почти!) никак не ускоряются. Можешь мне поверить я собаку скушал на этом. Мы на elastic
переходили чтобы поднять перформанс некоторых вещей.

Если текст курсора содержит выражение вида WHERE ... LIKE '%....%' и других предикатов нет - то
данный план всегда будет содержать FTS.

Исключение составляют
- специфичные LIKE выражения где нет метасимвола с фронта (например LIKE 'бла%'). В этом случае индекс на основе Б+Дерева может быть использован. Во всех остальных кейсах - нет.
- проприетарные технологии в Oracle (OracleText (CTX_CAT...)) при условии что в таблице 1 единственное поле и оно стоит под этим доменным индексом.
- проприетарные технологии PostgreSQL, MySQL, MS-SQL которые поддерживают индексы текстового поиска.

Беря во внимание мой Java-интерфейс и мою постановку вероятность этих специфичных кейсов практически равна нулю.
И затачивать под них генерализованный Jdbc поиск я не хочу.

Беря во внимание что никто не хочет искать выражение 'бла%' а все хотят искать выражение в любой части документа
данная LIKE оптимизация нам не поможет. Сюда-же до кучи функциональные индексы.

Ускорить FTS под Oracle можно для крупных partitioned таблиц при использовании hint +PARALLEL(n) в n процессов по аналогии
c фьючерсами в java. Для этого почти ничего не надо делать только детектировать тип DBMS (через DatabaseMetadata)
и активировать хинт.

Опять-же для данной задачи КМК важнее чтобы она работала концептуально правильно а уже всякие тюнинги можно
сделать потом как плагины изменяющие оригинальный текст запроса.
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39702177
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяmaytonПодумайте почему в интерфейсе я заложил не List а Iterator в качестве типа возвращаемого значения.лист или итератор - это будет не быстрее чем это сделать в субд.
если есть права - можно получить все данные о субд и по ним построить запрос по поиску нужных данных
записывать в лист или итератор скачанное из субд это не разумно, потому как память требуемую для лист/итератор лусше отдать субд она более правильно будет использовать.

Ну всё таки. Ты ПОНИМАЕШЬ зачем вообще в Java есть интерфейс Iterator? В чем его назначение? Зачем вообще
он выделен в отдельную сущность? Почему иерархия коллекций не завершилась на уровне List?

Почему я настаиваю именно на Iterator а не сделал просто List?
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39702196
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЕсли-б ты был DBA как я, то ты сразу-бы понял что задачи полного поиска по like не индексируютсяя и не заявлял про индексы.
я знаю что like очень медленный поиск, но если сравнивать mysql 5.7 с версиями до 5.7 - можно увидеть десятикратную разницу . я не знаю чем они этого добились, но факт остаётся фактом.

и эта 1.6 сек для поиска в 3лямах я считаю вполне приемлемым . всё конечно зависит от задачи.

я не могу понять что ты хочешь добиться применив свой вариант интерфейса, но я вижу что применение его будет тормозить систему.
поиск в числовых полях по like - это несколько странная задача. числовые поля как правило индексируются и поиск быстрый.
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39702203
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяmaytonЕсли-б ты был DBA как я, то ты сразу-бы понял что задачи полного поиска по like не индексируютсяя и не заявлял про индексы.
я знаю что like очень медленный поиск, но если сравнивать mysql 5.7 с версиями до 5.7 - можно увидеть десятикратную разницу . я не знаю чем они этого добились, но факт остаётся фактом.

и эта 1.6 сек для поиска в 3лямах я считаю вполне приемлемым . всё конечно зависит от задачи.

я не могу понять что ты хочешь добиться применив свой вариант интерфейса, но я вижу что применение его будет тормозить систему.
поиск в числовых полях по like - это несколько странная задача. числовые поля как правило индексируются и поиск быстрый.
Человек который ищет информацию - обычно не различает числа-строки-даты. Он ищет проивольный текст.
Номер счета в банке в формате хххх-хххх-хххх.... Налоговый номер который не всегда число. Номер телефона
который в принципе никогда (повертье мне) не был числом. SysGUID транзакции в терминале. Название юр-лица
которое вызывает интерес. И любая другая инфа которая интересна вам если вы - частный детектив. Сотрудник
налоговой. Спецслужб. Или просто любопытный кул-хацкер. Неважно.

А важно то что текстовый поиск имеет другую (не-реляционную) природу. И в данном моём хакатоне я предложил
его реализовать если кто осилит. Впрочем я думаю что я перефразирую тему и форкну ее отдельным топиком.
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39702223
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
Итератор служит чисто для перебора по кортежу.
Т.е. этап формирования и фильтров уже пройден.
Или у тебя итератор по полям тоже?
Т.е. это пол задачи. Вадя говорит о первой части, а итератор это потом синтаксический сахар подкачки записей как в гугле.
А для вади любой ООП это прокладки.
Бесполезен спор.
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39702225
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЧеловек который ищет информацию - обычно не различает числа-строки-даты. Он ищет проивольный текст.
Номер счета в банке в формате хххх-хххх-хххх.... Налоговый номер который не всегда число. Номер телефона
который в принципе никогда (повертье мне) не был числом. SysGUID транзакции в терминале. Название юр-лица
которое вызывает интерес. И любая другая инфа которая интересна вам если вы - частный детектив. Сотрудник
налоговой. Спецслужб. Или просто любопытный кул-хацкер. Неважно.я уже показал что происходит при поиске с помощью like в числовом поле - оно преобразуется в текстовое
если мне надо найти в нескольких полях некоторые из которых числовые , я воспользуюсь (буду говорить о mysql т.к. последнее время только с ней и работаю)
оператором concat_ws(' ' , поле1, поле2...)
любое числовое поле попав в этот оператор превращается в строку.
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39702227
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Итератор служит чисто для перебора по кортежу.
Т.е. этап формирования и фильтров уже пройден.
вот тут вообще непонятки
если уже отбор в базе пройден зачем в итератор?
чтоб потом из итератора фильтровать?
или сделать пагинацию?
...
Рейтинг: 0 / 0
25 сообщений из 158, страница 5 из 7
Форумы / Java [игнор отключен] [закрыт для гостей] / JDBC необязательные параметры
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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