powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / DataSet как БД в оперативной памяти для увеличения производительности.
6 сообщений из 6, страница 1 из 1
DataSet как БД в оперативной памяти для увеличения производительности.
    #36345292
teepok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
У меня в БД есть таблица с ФИО людей.
Необходимо написать сервис, в который передается строкавая переменная, и который будет искать в этой строке фигурантов из БД (различные комбинации Ф, И, О во входной строке).
При использовании простых алгоритмов поиска, например когда ищется 100% сравнение с ФИО все просто: пишем незамысловатую хранимку в БД, при этом все работает быстро, даже учитывая что select реально делается не из единственной таблицы, а делается join и что в каждой таблице около 1 млн. записей.
Но как только появляется необходимость более сложного алгоритма поиска, например необходим контекстный поиск: проверяемая фраза(входная переменная) "Петрова нет дома" и фигурант в БД у меня "Петров", то понятно что для такого алгоритма в БД уже необходимо применять LIKE, регулярные выражения или нечто подобное. Я уже не говорю о более сложных алгортмах проверки, например когда нужно искать с учетом возможной опечатки: "ПетЛова нет дома", тогда конструкция хранмой процедуры сильно усложняется, но это не страшно, а страшно то, что резко растет время выполнения запроса, а это как раз ключевое требвание. Необходимо чтобы сервис выдавал ответ о сопадении или несовпадении, ну например, быстрее чем за 0,01 секунду, а лучше даже быстрее.
Мысль мне пришла следующая: алгоритм поиска перенести в промежуточный уровень, например в сервис WCF. В момент инициализации сервиса загружать в структуру DataSet все необходимые данные из БД. И когда приходит запрос к сервису, данные ищутся в DataSet без каких либо обращений к БД.
До этого не имел общени с LINQ, но бегло прочитав, понял, что это удобнее и лучше по быстродействию чем какие то самописные выборки из DataSet.
Вопрос собственно в следующем: а что еще есть для более удобного и быстрого контекстного поиска для моей задачи в DataSet? Можно ли как-то индексировать поля? :) Может есть какие-то аналоги TSQL функций SOUNDEX() и DIFFERENCE() для DataSet или есть примеры самописных подобных функций? А может вообще следует прибегнуть к другим технологиям и средствам?
...
Рейтинг: 0 / 0
DataSet как БД в оперативной памяти для увеличения производительности.
    #36346672
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
teepok
Вопрос собственно в следующем: а что еще есть для более удобного и быстрого контекстного поиска для моей задачи в DataSet? Можно ли как-то индексировать поля? :) Может есть какие-то аналоги TSQL функций SOUNDEX() и DIFFERENCE() для DataSet или есть примеры самописных подобных функций? А может вообще следует прибегнуть к другим технологиям и средствам?
Вы думаете будет быстрее??? Аналоги... Для Датасет? Нет? но вот есть такие штуки... String Similarity and Extension Methods
...
Рейтинг: 0 / 0
DataSet как БД в оперативной памяти для увеличения производительности.
    #36347245
Фотография Диез
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
DataSet как БД в оперативной памяти для увеличения производительности.
    #36348063
teepok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
buserteepok
Вопрос собственно в следующем: а что еще есть для более удобного и быстрого контекстного поиска для моей задачи в DataSet? Можно ли как-то индексировать поля? :) Может есть какие-то аналоги TSQL функций SOUNDEX() и DIFFERENCE() для DataSet или есть примеры самописных подобных функций? А может вообще следует прибегнуть к другим технологиям и средствам?
Вы думаете будет быстрее??? Аналоги... Для Датасет? Нет? но вот есть такие штуки... String Similarity and Extension Methods
Я думаю тут к гадалке ходить не надо, чтение из оперативной памятя несравнимо с чтением с дискового накопителя и тут никакое кеширование не поможет. А что БД в данный момент хранит в памяти, а что на диске я не могу, это уже внутренняя каша. Другой вопрос, что алгоритмы прохода по данным и теже самые функции SOUNDEX() и т.п. в БД заточены и оптимизированы, а я на C# напишу криво и тогда конечно роста производительности не будет. Потому я и спрашивал о готовых алгоритмах :). За ссылку огромное спасибо, много полезной информации!
...
Рейтинг: 0 / 0
DataSet как БД в оперативной памяти для увеличения производительности.
    #36348076
teepok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Диезteepok,

http://ru.wikipedia.org/wiki/Lucene

?
Тоже очень интересно! Правда там инфа плохо систематизирована, но все равно, спасибо, буду изучать.
...
Рейтинг: 0 / 0
DataSet как БД в оперативной памяти для увеличения производительности.
    #36348101
teepok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кстати, у Oracle есть интересная вещь на эту тему. Называется Oracle In-Memory Database Cache Option for Oracle(r) Database Enterprise Edition и стоит 36000$ на процессор. Это как раз БД, но ЦЕЛИКОМ разполагающаяся в оперативной памяти. Просто хотелось бы сначала понять, можно ли обойтись без ее покупки :). Я думаю можно, собственно и буду это проверять в ближайшее время.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / DataSet как БД в оперативной памяти для увеличения производительности.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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