Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
106 / 82 / 15
Регистрация: 07.06.2011
Сообщений: 584
Записей в блоге: 2
1

Посоветуйте локальную легкопереносимую с прогой СУБД с хорошей скоростью

02.01.2013, 21:13. Показов 690. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Пишу прогу на дельфах, там будет словарик на 500 000 слов для проверки орфографии. Закинул в акцесс но скорость не очень удовлетворяет. Хотелось бы скоростную базу простую в установке и работе... И которую легко перенести на другой комп вместе с прогой...
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.01.2013, 21:13
Ответы с готовыми решениями:

Посоветуйте бюджетник с хорошей камерой
до 10000

Посоветуйте до 5 дюймов с хорошей камерой
Подыскиваю замену своему highscreen ice2, все в нем нравится, кроме камеры, у меня старый нокиа...

Посоветуйте ноутбук с хорошей видеокартой
Здравствуйте. Посоветуйте ноутбук с хорошей видеокартой (дискретной), Nvidia или AMD Radeon - что...

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

12
Эксперт Pascal/Delphi
4912 / 2781 / 853
Регистрация: 04.10.2012
Сообщений: 10,121
02.01.2013, 21:30 2
Цитата Сообщение от alexan0308 Посмотреть сообщение
которую легко перенести на другой комп вместе с прогой...
в этом плане все же Access проще на мой взгляд.
Вы к БД через ADO подключаетесь я надеюсь?
0
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
02.01.2013, 21:32 3
Цитата Сообщение от alexan0308 Посмотреть сообщение
скорость не очень удовлетворяет
А индексы ты тоже "закинул" ?
0
106 / 82 / 15
Регистрация: 07.06.2011
Сообщений: 584
Записей в блоге: 2
02.01.2013, 21:43  [ТС] 4
Цитата Сообщение от droider Посмотреть сообщение
Вы к БД через ADO подключаетесь я надеюсь?
ага...
Цитата Сообщение от mss Посмотреть сообщение
А индексы ты тоже "закинул" ?
ага... сделал ключевыми оба поля - ид и само слово... Ну в принципе работает очень быстро но хочется же вообще )) Медленным может мне кажется потому что много слов проверяется....
0
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
02.01.2013, 21:52 5
Цитата Сообщение от alexan0308 Посмотреть сообщение
потому что много слов проверяется
Или кроме собственно поиска делаешь при этом кучу лишних/вредных программных действий
0
912 / 877 / 62
Регистрация: 06.01.2010
Сообщений: 2,367
Записей в блоге: 6
02.01.2013, 22:37 6
alexan0308, как бысто поиск просходит сейчас? как быстро хотелось бы получить в итоге?

Какой sql-запрос отправляете на сервер?
есть опасение, что его структура может не способствовать подхвату индекса (например, select ... where name like '%бла-бла%' индекс не подхватит)
0
106 / 82 / 15
Регистрация: 07.06.2011
Сообщений: 584
Записей в блоге: 2
02.01.2013, 22:53  [ТС] 7
Сначала открываю словарик
Delphi
1
2
3
Form1.ADOQuery1.SQL.Clear;
Form1.ADOQuery1.SQL.Add('SELECT * FROM slovar order by slovo');
Form1.ADOQuery1.Active:=True;
Потом делаю поиск слов из текста в этом словаре с помощью адотабле
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
Form1.ADOTable1.active:=true;
for i:=1 to WordsCount do
begin
   LookupRes :=  Form1.ADOTable1.Lookup('slovo', sssr, 'id;');
   flagwordright:=false;
         if not(VarIsNull(LookupRes)) then flagwordright:=true; // слово есть в словаре 
                                                          // поэтому нет ошибки
         if not(flagwordright) then //неправильное слово в RichEdit 
                begin
                    RichEdit_text:=sssr + ' на стр. №' + IntToStr(Straniza); RichEdit_add_text;
                    inc(error_count);
                end;
end;
Я поле слово сделал ключевым это нормально? Скорость может измерю сейчас....
0
912 / 877 / 62
Регистрация: 06.01.2010
Сообщений: 2,367
Записей в блоге: 6
03.01.2013, 00:50 8
alexan0308, правильно ли я вас понял, что вы открываете таблицу-справочник с 500 тыс. строк просто для целей "искать соответствия"? Если так, то это жесткое изнасилование компьютера. Хотелось бы мне знать, сколько отжирает ваша программа ОЗУ до и после открытия этого справочника, и как долго происходит это открытие.
Думаю, что куда эффективнее будет использование адресных запросов, примерно так:
SQL
1
SELECT * FROM Table1 WHERE name=:name
, либо
SQL
1
SELECT * FROM Table1 WHERE name LIKE :name || '%'
если Access принимает такой синтаксис, и контекст требует поиск по началу подстроки, а не только по полному совпадению.
Эти запросы будут использовать индекс (если вы его корректно построили) и займут минимум памяти и процессорного времени. Правда ваш дельфовый код нужно будет полностью переделать.
Впрочем, практика - критерий истины. Возможно ваши замеры покажут совсем другую картину, чем то, что я домыслил.
1
106 / 82 / 15
Регистрация: 07.06.2011
Сообщений: 584
Записей в блоге: 2
03.01.2013, 01:50  [ТС] 9
Да, чо то я про память не подумал. У меня ее много, вот и не заметил. Переделал
Delphi
1
2
3
4
5
6
7
8
9
for i:=1 to WordsCount do
begin
   flagwordright:=false;
   Form1.ADOQuery1.SQL.Clear;
    Form1.ADOQuery1.SQL.Add('SELECT * FROM slovar where slovo="'+sssr+'"');
    Form1.ADOQuery1.Active:=True;
    slovo:=Form1.ADOQuery1.FieldByName('slovo').AsString;
    if slovo<>'' then flagwordright:=true;
end;
Память стало жрать в разумных пределах существенно меньше.... Скорость не заметил вроде разницы.. Только почему то постепенно падает в цикле

Добавлено через 1 минуту
А это вообще убрал...
Цитата Сообщение от alexan0308 Посмотреть сообщение
Сначала открываю словарик
Delphi
1
2
3
Form1.ADOQuery1.SQL.Clear;
Form1.ADOQuery1.SQL.Add('SELECT * FROM slovar order by slovo');
Form1.ADOQuery1.Active:=True;
0
912 / 877 / 62
Регистрация: 06.01.2010
Сообщений: 2,367
Записей в блоге: 6
03.01.2013, 09:47 10
ваш код
Delphi
1
2
3
4
5
6
   flagwordright:=false;
    Form1.ADOQuery1.SQL.Clear;
    Form1.ADOQuery1.SQL.Add('SELECT * FROM slovar where slovo="'+sssr+'"');
    Form1.ADOQuery1.Active:=True;
    slovo:=Form1.ADOQuery1.FieldByName('slovo').AsString;
    if slovo<>'' then flagwordright:=true;
я бы переделал в такой:
Delphi
1
2
3
4
5
6
7
with Form1.ADOQuery1 do
begin
  Active:=False;
  SQL.Text:=Format('SELECT 1 FROM slovar where slovo="%s"', [sssr]);
  Open;
  flagwordright:=not IsEmpty;
end;
0
106 / 82 / 15
Регистрация: 07.06.2011
Сообщений: 584
Записей в блоге: 2
03.01.2013, 12:06  [ТС] 11
Ща попробую... я вот еще думаю вместо одной базы сделать 30 баз что ли... по буквам алфавита... В каждой будет примерно по 20 000 записей... запрос типа параметризовать... Летать будет?
0
912 / 877 / 62
Регистрация: 06.01.2010
Сообщений: 2,367
Записей в блоге: 6
03.01.2013, 13:17 12
alexan0308, скорее вы получите обратный эффект. Партиционирование, шардирование и прочие умные слова уместны на больших базах (сотни миллонов и миллиарды строк), и только тогда, когда разные части работают на разных железках, а не одной и той же персоналке.
0
106 / 82 / 15
Регистрация: 07.06.2011
Сообщений: 584
Записей в блоге: 2
04.01.2013, 13:42  [ТС] 13
Да, на время взял базу и 40 тысяч слов - никакой разницы... Проблема видимо действительно не в базе а самой программе... Слова берутся и проверяются в файле Word поэтому тормоза...

Ну главное убедили остаться в access =)
0
04.01.2013, 13:42
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.01.2013, 13:42
Помогаю со студенческими работами здесь

Посоветуйте смартфон в районе 15000, с хорошей камерой
Интересует телефон/смартфон в районе 15000 с хорошей камерой.

Посоветуйте видео карту для хорошей оптимизации в новых играх
Ребята посаветуйте какую видео карту получше этой поставить чтобы подошла. вот мои...

Посоветуйте телефон типа Philips Xenium X2301 с хорошей камерой
Посоветуйте пожалуйста телефон типаPhilips Xenium X2301, только желательно, что бы камера была...

Поезд ехал t1 ч со скоростью v1 км / ч, t2 ч со скоростью v2 и t3 ч со скоростью v3. Определить пройденные пути с разной
Поезд ехал t1 ч со скоростью v1 км / ч, t2 ч со скоростью v2 и t3 ч со скоростью v3. Определить...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru