Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

В чем лучше хранить данные?

39K
02 мая 2009 года
sergeik
2 / / 14.07.2008
Здрвствуйте,
Есть цель сделать морфологический анализатор. Баз базы данных по словам и их описанию тут не обойтись.
Имеется такая база данных в MS Access. У каждого слова есть поле ID, поле, куда записывается само слово и поле, где перечислено описание.
В связи с тем, что БД содержит около нескольких миллионов записей встает вопрос по быстродействию.

Движок, который будет производить анализ слов в тексте, будет написан на Делфи.

Исходя из всего вышесказанного, у меня вопросы:

Какую БД лучше использовать для наиболее быстрой работы? Или может быть залить БД в текстовые файлы?

Как сделать так, чтобы любое слово из такой БД искалось в течении долей секунд?

=============================

Я конечно дилетант в программировании, а особенно под windows, но небольшой опыт, что имеется, подсказывает мне, что тут без индексов в БД не обойтись.


Если переводить на простой язык, то мое видение такое:
-------------------------------------------
а/
аа/
ааа/
аба/
абб/
абв/
аб/
ав/
аг/

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

Поделитесь, пожалуйста своими мыслями по этому поводу и помогите советом.

С уважением,
Сергей.
5
02 мая 2009 года
hardcase
4.5K / / 09.08.2005
Цитата: sergeik
Движок, который будет производить анализ слов в тексте, будет написан на Делфи.

Не самый лучший выбор для системы работы с текстом.

Цитата: sergeik

Какую БД лучше использовать для наиболее быстрой работы? Или может быть залить БД в текстовые файлы?

Как сделать так, чтобы любое слово из такой БД искалось в течении долей секунд?

Загрузить в память всю базу (хэш-таблица или дерево). Два миллиона слов не так уж и много (при средней длине слова в 20 букв получим нагрузку на память в 80-100 МБ при использовании Unicode + доп. информация по кажому слову где-то 20-30 МБ добавит).

63
02 мая 2009 года
Zorkus
2.6K / / 04.11.2006
Цитата: hardcase
Не самый лучший выбор для системы работы с текстом.

Загрузить в память всю базу (хэш-таблица или дерево). Два миллиона слов не так уж и много (при средней длине слова в 20 букв получим нагрузку на память в 80-100 МБ при использовании Unicode + доп. информация по кажому слову где-то 20-30 МБ добавит).


Для обработки текста лучше всего, боюсь, подойдут языки вроде Python/Ruby. Тогда это будет по принципу KISS ;).

294
03 мая 2009 года
Plisteron
982 / / 29.08.2003
Я одну мысль скажу, только вы не смейтесь.
Если не хочется самому реализовывать деревья и поиск по ним, можно взять Oracle XE (бесплатная, есть некоторые ограничения) и ODAC для доступа к БД. Слова хранить, естественно, в Index-Organized Table.
Добавлено: Конечно, стрельба из пушки по воробьям, но быстро, удобно и эффективно.
5
03 мая 2009 года
hardcase
4.5K / / 09.08.2005
Цитата: Plisteron
Я одну мысль скажу, только вы не смейтесь.
Если не хочется самому реализовывать деревья и поиск по ним, можно взять Oracle XE (бесплатная, есть некоторые ограничения) и ODAC для доступа к БД. Слова хранить, естественно, в Index-Organized Table.
Добавлено: Конечно, стрельба из пушки по воробьям, но быстро, удобно и эффективно.


Понятно что и MsSqlServer 2008 Express можно взять :) Ограничения совершенно аналогичные у него. Возможности применительно к этой задаче тоже overkill, но кроме того, есть поддержка хостинга .NET, что может серьезно ускорить обработку данных.

294
04 мая 2009 года
Plisteron
982 / / 29.08.2003
Цитата: hardcase
Понятно что и MsSqlServer 2008 Express можно взять :) Ограничения совершенно аналогичные у него. Возможности применительно к этой задаче тоже overkill, но кроме того, есть поддержка хостинга .NET, что может серьезно ускорить обработку данных.


Можно и M$ SQL взять.
[[offtopic]]
Но .NET, имхо, придумана не для того, чтобы ускорить обработку чего-либо, а как раз наоборот, чтобы замедлить чересчур быстрые современные компьютеры.
[[/offtopic]]
Добавлено: А что, в M$ SQL появилась возможность строить дополнительные индексы для IOT?

5
04 мая 2009 года
hardcase
4.5K / / 09.08.2005
Цитата: Plisteron
Можно и M$ SQL взять.
[[offtopic]]
Но .NET, имхо, придумана не для того, чтобы ускорить обработку чего-либо, а как раз наоборот, чтобы замедлить чересчур быстрые современные компьютеры.
[[/offtopic]]
Добавлено: А что, в M$ SQL появилась возможность строить дополнительные индексы для IOT?


Я в СУБД не сильно разбираюсь, но думаю IOT или обычный индекс тут рояля не сыграет - будет одинакого шустро. Я к тому, что работа кода (ага мегатормозный .NET) с данными в контексте СУБД гораздо шустрее работы кода извне.

294
04 мая 2009 года
Plisteron
982 / / 29.08.2003
Цитата: hardcase
Я в СУБД не сильно разбираюсь, но думаю IOT или обычный индекс тут рояля не сыграет - будет одинакого шустро.


Представим, что юзер пишет следующую выборку:

 
Код:
SELECT id, word, description FROM words where word = :parm_word
Действия БД с проиндексированной таблицей: найти в индексе нужное значение word, достать из индекса позицию в таблице, отпозиционироваться в таблице, достать из таблицы id и description.
Действия БД в IOT: найти в индексе нужное значение word, достать лежащие рядом id и description.
Во втором случае меньше телодвижений. Мелочь -- а приятно.
Цитата: hardcase
Я к тому, что работа кода (ага мегатормозный .NET) с данными в контексте СУБД гораздо шустрее работы кода извне.

Разве топикастер говорил, что будет использовать для разработки .NET? Если же речь идёт о серверной части (триггеры, хранимые процедуры и т.п.), то, думаю, PL/SQL будет не медленнее .NET. Про взаимодействие с СУБД: я предлагал использовать для работы с Oracle компоненты ODAC, которые обеспечивают самую короткую цепочку передачи данных между СУБД и приложением, и .NET, полагаю, не мсожет предложить ничего более эффективного (хотя, сопоставимое -- возможно).

5
04 мая 2009 года
hardcase
4.5K / / 09.08.2005
Цитата: Plisteron
Представим, что юзер пишет следующую выборку

ОК, понятно, IOT это по сути хранение таблицы в виде дерева.

Цитата: Plisteron
Разве топикастер говорил, что будет использовать для разработки .NET?

Автор вообще хочет Аксесс использовать для хранения.

Цитата: Plisteron
Если же речь идёт о серверной части (триггеры, хранимые процедуры и т.п.), то, думаю, PL/SQL будет не медленнее .NET.

Ну тут измерять нужно. Ежели работать с данными то разницы никакой. А если какую логику навернуть, например, что-то нетривиальное со строками сделать, какие-то вычисления дополнительные произвести - тут уже удобнее (да и быстрее) на чем-то более дружественном к программисту, чем PL/SQL.
Я вот как-то регулярные выражения всобачивал в MSSQL ;)

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

294
04 мая 2009 года
Plisteron
982 / / 29.08.2003
Цитата: hardcase
Я вот как-то регулярные выражения всобачивал в MSSQL ;)

А зачем мне их всобачивать? Они в Oracle уже есть. Это во-первых.
А, во-вторых, если уж мы добрались до необходимости создания расширения функций СУБД, Oracle предоставляет возможность создавать модули на чём угодно, и там есть нормальные удобные механизмы взаимодействия. Microsoft .NET -- очередной стандарт на темноту (есть анекдот такой, потом как-нибудь расскажу).

1
04 мая 2009 года
kot_
7.3K / / 20.01.2000
Цитата: Plisteron

Добавлено: А что, в M$ SQL появилась возможность строить дополнительные индексы для IOT?


появилось, появилось. Не нужно путать отсутствие терминологии и отсутствие возможности.
Разница между мелкософт и оракле - только в том что один говорит - дай денег, а потом поедешь, второй - везу бесплатно, деньги за вход и выход.
и то и другое - стандарт "на темноту". Разница между Биллом и Томом - только в имени и фамилии.

294
05 мая 2009 года
Plisteron
982 / / 29.08.2003
Цитата: kot_
и то и другое - стандарт "на темноту".

Я бы так не сказал. В начале эпох, когда не было ничего, появились IBM и Oracle. А кто игру придумал -- тот и правила придумывает. А Microsoft до 2000 года не могла похвастаться наличием своей клиент-серверной СУБД.

Цитата: kot_
Разница между Биллом и Томом - только в имени и фамилии.

Тогда уж между Биллом и Ларри. А разница хотя бы такова, что последний не зациклен на винде, Oracle есть под многие операционные системы.

1
05 мая 2009 года
kot_
7.3K / / 20.01.2000
Цитата: Plisteron
Я бы так не сказал. В начале эпох, когда не было ничего, появились IBM и Oracle. А кто игру придумал -- тот и правила придумывает. А Microsoft до 2000 года не могла похвастаться наличием своей клиент-серверной СУБД.


Я ктому что сейчас год на дворе 2009 и сейчас не обязательно выбирать только только между IBM и Oracle.

294
05 мая 2009 года
Plisteron
982 / / 29.08.2003
Цитата: kot_
Я ктому что сейчас год на дворе 2009 и сейчас не обязательно выбирать только только между IBM и Oracle.


Я не говорил, что надо выбирать только между ними. Для задачи топикастера, вполне вероятно, подойдёт и MySQL или вообще что-нибудь встраиваемое типа BerkleyDB. Кстати, обе перечисленных нынче принадлежит Oracle. ;)

6
05 мая 2009 года
George
4.1K / / 05.01.2007
Благо, PostgreSQL еще никто не купил. =))

зы. 1000-ое сообщение, аднако =)
294
05 мая 2009 года
Plisteron
982 / / 29.08.2003
Цитата: Washington
Благо, PostgreSQL еще никто не купил. =))

Сплюнь! А то приглянётся Биллу...

Цитата: Washington
зы. 1000-ое сообщение, аднако =)

Какое-то не круглое число. Вот будет 1024-е -- тогда и поздравим!

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог