|
|
|
DataSet как БД в оперативной памяти для увеличения производительности.
|
|||
|---|---|---|---|
|
#18+
Добрый день. У меня в БД есть таблица с ФИО людей. Необходимо написать сервис, в который передается строкавая переменная, и который будет искать в этой строке фигурантов из БД (различные комбинации Ф, И, О во входной строке). При использовании простых алгоритмов поиска, например когда ищется 100% сравнение с ФИО все просто: пишем незамысловатую хранимку в БД, при этом все работает быстро, даже учитывая что select реально делается не из единственной таблицы, а делается join и что в каждой таблице около 1 млн. записей. Но как только появляется необходимость более сложного алгоритма поиска, например необходим контекстный поиск: проверяемая фраза(входная переменная) "Петрова нет дома" и фигурант в БД у меня "Петров", то понятно что для такого алгоритма в БД уже необходимо применять LIKE, регулярные выражения или нечто подобное. Я уже не говорю о более сложных алгортмах проверки, например когда нужно искать с учетом возможной опечатки: "ПетЛова нет дома", тогда конструкция хранмой процедуры сильно усложняется, но это не страшно, а страшно то, что резко растет время выполнения запроса, а это как раз ключевое требвание. Необходимо чтобы сервис выдавал ответ о сопадении или несовпадении, ну например, быстрее чем за 0,01 секунду, а лучше даже быстрее. Мысль мне пришла следующая: алгоритм поиска перенести в промежуточный уровень, например в сервис WCF. В момент инициализации сервиса загружать в структуру DataSet все необходимые данные из БД. И когда приходит запрос к сервису, данные ищутся в DataSet без каких либо обращений к БД. До этого не имел общени с LINQ, но бегло прочитав, понял, что это удобнее и лучше по быстродействию чем какие то самописные выборки из DataSet. Вопрос собственно в следующем: а что еще есть для более удобного и быстрого контекстного поиска для моей задачи в DataSet? Можно ли как-то индексировать поля? :) Может есть какие-то аналоги TSQL функций SOUNDEX() и DIFFERENCE() для DataSet или есть примеры самописных подобных функций? А может вообще следует прибегнуть к другим технологиям и средствам? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2009, 11:04 |
|
||
|
DataSet как БД в оперативной памяти для увеличения производительности.
|
|||
|---|---|---|---|
|
#18+
teepok Вопрос собственно в следующем: а что еще есть для более удобного и быстрого контекстного поиска для моей задачи в DataSet? Можно ли как-то индексировать поля? :) Может есть какие-то аналоги TSQL функций SOUNDEX() и DIFFERENCE() для DataSet или есть примеры самописных подобных функций? А может вообще следует прибегнуть к другим технологиям и средствам? Вы думаете будет быстрее??? Аналоги... Для Датасет? Нет? но вот есть такие штуки... String Similarity and Extension Methods ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2009, 17:28 |
|
||
|
DataSet как БД в оперативной памяти для увеличения производительности.
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2009, 23:22 |
|
||
|
DataSet как БД в оперативной памяти для увеличения производительности.
|
|||
|---|---|---|---|
|
#18+
buserteepok Вопрос собственно в следующем: а что еще есть для более удобного и быстрого контекстного поиска для моей задачи в DataSet? Можно ли как-то индексировать поля? :) Может есть какие-то аналоги TSQL функций SOUNDEX() и DIFFERENCE() для DataSet или есть примеры самописных подобных функций? А может вообще следует прибегнуть к другим технологиям и средствам? Вы думаете будет быстрее??? Аналоги... Для Датасет? Нет? но вот есть такие штуки... String Similarity and Extension Methods Я думаю тут к гадалке ходить не надо, чтение из оперативной памятя несравнимо с чтением с дискового накопителя и тут никакое кеширование не поможет. А что БД в данный момент хранит в памяти, а что на диске я не могу, это уже внутренняя каша. Другой вопрос, что алгоритмы прохода по данным и теже самые функции SOUNDEX() и т.п. в БД заточены и оптимизированы, а я на C# напишу криво и тогда конечно роста производительности не будет. Потому я и спрашивал о готовых алгоритмах :). За ссылку огромное спасибо, много полезной информации! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2009, 12:18 |
|
||
|
DataSet как БД в оперативной памяти для увеличения производительности.
|
|||
|---|---|---|---|
|
#18+
Диезteepok, http://ru.wikipedia.org/wiki/Lucene ? Тоже очень интересно! Правда там инфа плохо систематизирована, но все равно, спасибо, буду изучать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2009, 12:22 |
|
||
|
DataSet как БД в оперативной памяти для увеличения производительности.
|
|||
|---|---|---|---|
|
#18+
Кстати, у Oracle есть интересная вещь на эту тему. Называется Oracle In-Memory Database Cache Option for Oracle(r) Database Enterprise Edition и стоит 36000$ на процессор. Это как раз БД, но ЦЕЛИКОМ разполагающаяся в оперативной памяти. Просто хотелось бы сначала понять, можно ли обойтись без ее покупки :). Я думаю можно, собственно и буду это проверять в ближайшее время. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2009, 12:31 |
|
||
|
|

start [/forum/topic.php?fid=17&fpage=65&tid=1351571]: |
0ms |
get settings: |
8ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
40ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
| others: | 215ms |
| total: | 342ms |

| 0 / 0 |
