Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.07.18;
Скачать: [xml.tar.bz2];

Вниз

Простые вопросы по БД   Найти похожие ветки 

 
TUser ©   (2004-06-21 12:27) [0]

Сейчас заканчиваю свой первый серьезный проект, связанный с базами. Вот

накопилось несколько вопросов.

1. Нельзя ли где-нибудь прочитать сравнительную характеристику разных

СУБД. Коммерческих продуктов много, но чем dBase лучше Paradox"а я пока не понимаю. Т.е. понятно, есть раличия в том, какие типы данных

предоставляются, подержка ключей и пр., но хотелось бы почитать

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

использовать один, а когда другой.

2. Можно ли в SQL запросах через TQuery писать CREATE VIEW/DROP VIEW. Я

пробовал, но BDE такой запрос не обработал, или это просто я криво

писал? База бала - Paradox.

3. Какова в нормальных условиях скорость выполнения SQL запросов.

Ситуация такая. Программа выполняла подряд много запросов (несколько

миллионов, возможно даже десятков миллионов), при этом все это работало

долго. Т.е. каждый запрос обрабатывался в разумное время (скажем, 0.1

сек., хотя точно я не мерял), но когда их так много, то это уже тормоза.

Пробовал на Paradox"е, потом на dBase. Потом я переписал программу, и

вместо SQL запросов написал просто хождение по таблицам. Примерно так

procedure DeleteFounds(AC:TpdbAC; Chain:char); // Query3
var uniDC, uniD:integer;
{
DELETE
FROM Founds
WHERE Founds."Domain" IN
  (
  SELECT DISTINCT
      Domains.unind
  FROM Domains, DomClasses
  WHERE (Domains."DomClass"= DomClasses.unind)
       AND (DomClasses.PDB_AC = :ac) AND (Domains.PDB_CHAIN = :ch)
  )
}
begin
  with TabByName("DomClasses") do begin
       // Где-то выше описано
       // function TabByName(Name:string):TTable

     CancelRange;
     SetRangeStart;
     FieldValues["PDB_AC"]:=AC;
     SetRangeEnd;
     FieldValues["PDB_AC"]:=AC;
     ApplyRange;
     Refresh;
     while not eof do begin
        if FieldValues["PDB_AC"] = AC then begin
           uniDC:=integer(FieldValues["UNIND"]);
           with TabByName("Domains") do begin
              CancelRange;
              SetRangeStart;
              FieldValues["DOMCLASS"]:=uniDC;
              FieldValues["PDB_CHAIN"]:=Chain;
              SetRangeEnd;
              FieldValues["DOMCLASS"]:=uniDC;
              FieldValues["PDB_CHAIN"]:=Chain;
              ApplyRange;
              Refresh;
              while not eof do begin
                 if (FieldValues["DOMCLASS"] = uniDC) and
                    (FieldValues["PDB_CHAIN"] = Chain) then begin
                    uniD:=integer(FieldValues["UNIND"]);
                    with TabByName("Founds") do begin
                       First; SetKey;
                       FieldValues["DOMAIN"]:=uniD;
                       while GotoKey do
                          Delete;
                       end;
                    end;
                 Next;
                 end;
              end;
           end;
        Next;
        end;
     end;
end;

Программа стала работать в 4 раза быстрее. Вроде бы BDE должна выбирать

оптимальный (т.е. самый быстрый) способ выполнения запросов. Или

медленность выполнения присуща SQL запросам всегда.
Если SQL запросы действительно выполняются медленее навигации по

таблице, тогда такой вопрос. Как работает dbExpress. Там вроде бы

никаких SetKey, GotoKey, SetRange и прочего нет. В данном случае,

конечно, SQL запрос написать проше, чем делать все ручками. Но есть

много примеров, когда написать SetKey/GotoKey не сложно. Тогда

получается, что в этих случаях dbExpress будет работать медленнее, чем

BDE, или я не прав?

4. В продолжение предыдущего вопроса. Там используется такая конструкция

with TabByName("Domains") do begin
  CancelRange;
  {setting new range}
  ApplyRange;
  Refresh;
  while not eof do begin
     if {запись соответствует Range"у} then begin

        ...

        end;
     Next;
     end;

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

Range, и записей, которые не соответствуют ему я видеть не должен.

Одноко, они в таблице есть (т.е. видимы).


 
TUser ©   (2004-06-21 12:41) [1]

5. Является ли TDataModule потоко-беопасным. Надо ли обращение к TTable/TQuery/ect, которые на Дата-моделу находятся защищать synchronize"ом.


 
Плохиш ©   (2004-06-21 12:41) [2]

1. С каких пор Paradox и dBase стали СУБД?

2. Ответ находится в localsql.hlp в разделе "неподдерживаемые элементы языка" ;-)


 
clickmaker ©   (2004-06-21 12:45) [3]

5. Сам БДЕ не является потоко-безопасным. 1 поток - 1 сессия


 
TUser ©   (2004-06-21 13:46) [4]


> С каких пор Paradox и dBase стали СУБД?

Наверное, я чего-то не понимаю. А кто же они? Вроде локальные системы управления базами данных, типа Access, разве нет?


 
Johnmen ©   (2004-06-21 14:01) [5]

>Сейчас заканчиваю свой первый серьезный проект, связанный с
>базами.
>Вот накопилось несколько вопросов.

:)))))))
Обычно сначала решают вопросы, а потом делают проект...
Если иначе, то насколько он, проект, серьезен ?

PS Без обид.


 
Anatoly Podgoretsky ©   (2004-06-21 14:14) [6]

TUser ©   (21.06.04 13:46) [4]
Ты ему не верь, он наверно не видел ни дбейс ни парадокс, только дельфи, которая не является СУБД


 
Andrey V. ©   (2004-06-21 16:23) [7]

По первому пункту ...
Очень, имхо, хорошая ссылка http://www.degisy.com/bdealternative.php
Пробегала не так давно тут же.
Оччень все таки жаль , что автор не включил туда данные по локальному Adventage (хоть и обещал :-)).


 
Vemer ©   (2004-06-22 01:55) [8]

1. WWW.SQL.RU - Форумы - Сравнение баз данных..


 
Sergey13 ©   (2004-06-22 08:25) [9]

2TUser ©   (21.06.04 12:27)  
1. Почитать можно. Но как узнать, что то что читаешь - авторитетное? 8-) Зачастую пишут спецы (хорошо еще) в одной из сравниваемых СУБД, плохо знающие другую.

2. В Парадоксе есть вьюхи? Не знал. 8-) А вообще, теоретически (да и практически иногда) можно, но как правило не нужно, ИМХО. Менять метаданные из программы в 99.9% - дурной тон (опять же ИМХО) и говорит о плохом проектировании.

3.Это результат твоего "дибейсно-парадоксовского" мышления. Выполнять миллионы раз запрос - это ты недодумал что то - обычно стараются одним запросом обработать миллион записей. Скорость при этом - дело кривизны рук пишущего. Хотя для указанных баз это и не очень существенно, ИМХО.


 
TUser ©   (2004-06-22 09:27) [10]


> Но как узнать, что то что читаешь - авторитетное

Положиться на авторитетное мнение других авторитетов. Например тех, кто часто бывает в этой конференции.


 
TUser ©   (2004-06-22 09:33) [11]


> 3. обычно стараются одним запросом

Ну, там ситуация примерно такая. Есть таблица, скажем с фамилиями, телефонами, названием отдела, фамилией начальника отдела, областью делятельности отдела и т.д. Ясно, что ее надо преобразовать в таблицу "Сотрудники" и "Отделы". А у меня есть файл с описанием отделов, т.е. таблицу отделов я создал. А еще есть файлы, в которых лежат данные про сотрудника. Названия отдела там нет, но есть данные о нем - начальник, обл. деятельности и т.д. Вот я и пишу запросы для каждого человека, чтобы в базу складывать уже только номер отдела.
Конкретная информация, конечно, совершенно другая, но смысл такой.


 
Sergey13 ©   (2004-06-22 09:46) [12]

2TUser ©   (22.06.04 09:33) [11]
А для программ, перекачивающих из одной БД (структуры) в другую, ИМХО не проблема 1час, 2часа ... Отработал 1 раз и забыл. А про начальную структуру, описанную тобой, я как раз и говорил - отвратное проектирование.


 
TUser ©   (2004-06-22 09:49) [13]

А начальная структура - это не база данных. Это созданные однажды лог-файлы. Ну а так, конечно, - за 6 часов все они обработались.


 
bushmen ©   (2004-06-22 09:53) [14]

>А начальная структура - это не база данных

По-моему, тебе надо теорию почитать для начала, а не "серьёзные проекты" писать.



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2004.07.18;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.044 c
1-1088631701
HF-Trade
2004-07-01 01:41
2004.07.18
Скролинг


4-1086285194
Kair
2004-06-03 21:53
2004.07.18


3-1088146105
Bless
2004-06-25 10:48
2004.07.18
Row cannot be located for updating. Some values may have been cha


3-1088072924
Valeri
2004-06-24 14:28
2004.07.18
Восстановить записи таблицы FoxPro (for Windows)


4-1086523953
Алекс
2004-06-06 16:12
2004.07.18
кто знает:bat-ик из доса запускает программу, а из программы нет





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский