Как выбрать СУБД ?

Модератор: Модераторы

Сообщение debi12345 » 26.08.2007 15:48:27

зато ExecSQL позволяеет более явно управлять транзакциями.

И через GUI это делается. Просто нужно научиться думать объемно, по GUI-ому.
В принципе понимаю вас - Лазарус+FPCSQLDB еще не достигли такой степени надежности, чтобы на них можно было полагаться. И все потому, что их БД-фишки не используют для реальных сложных проектов. Очень плохо, что все безответственно ломанулись в мало-мальски рабочие FIBL+RxLIB, тем самым перестав тестировать мэйнстримовый SQLDB. Что вы делаете, "вредители" ??? Еще и других агитируете :)

кстати в МСЕ есть разделение на пищущие и читающие транзакции в тойже птичке например ?

Не знаю, я в птичке полный ноль.
У Мартина спрошу :)

Удивительно, что вы в такие дебри лезете, как типы транзакций. Мне приходится писать весьма сложные БД-проекты, но с лихвой обхожусь обычными транзакциями. Даже SQlite3 с его запретом на вложенные транзакции не доставляет особых неудобств, при его скорости лишний раз перевыбрать данные - мелочь.
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5761
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Сообщение Attid » 26.08.2007 16:29:37

Очень плохо, что все безответственно ломанулись в мало-мальски рабочие FIBL+RxLIB, тем самым перестав тестировать мэйнстримовый SQLDB. Что вы делаете, "вредители" ??? Еще и других агитируете

а я и в дельфе стандартные компоненты для БД не юзал вот такой вот я загадочный =)

лихвой обхожусь обычными транзакциями.

сколько одновременно работающих пользователей ?
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2586
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Сообщение alexs » 26.08.2007 16:41:59

debi12345 писал(а):Очень плохо, что все безответственно ломанулись в мало-мальски рабочие FIBL+RxLIB

ну спасибо, блин, .... стараешся, стараешся ... а они ещё и обзываются...
вот уйду в свою песочницу, и лопатку с совочком заберу :lol: :lol: :lol: :lol:

а если серьёзно - на мой взгляд SQLDB - это очень ограниченная вещь (даже не смотря на красивый и сложный пример, показанные выше)
а вот то что я и многие другие привержен птичке (или ещё какому нить нормальному серверу) объяснется очень просто
когда пишеш много - то знаеш все особенности поведения конкретного сервера, на его изучение затрачиваеш много времени, и в дальнейшем для написания небольшой задачи для работы с данными проще взять вариант птицы встраиваемый, чем изучть новый движок и все его тонкости.
да и если потом в дальнейшем потребуется многопользовательность - то просто переводиш на сервер - и всё - переписывать ничего не надо.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4063
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Сообщение debi12345 » 26.08.2007 17:11:48

Ответ Мартина по поводу типов транзакций в ЖарПтичке :

Код: Выделить всё
>> I don't understand the question.
> Me too ;)
>
> As me understand, there're two ( or more ? ) types of transaction in
> FireBird - "writting" & "reading".
> The question has arisen around my criticism on usage "ExecSQL" for almost
> all DB-stuff in FPC.

TSQLTransaction has property Params which is used for starting the
transaction, see mibconnection.pas:
"
function TIBConnection.StartDBTransaction(
                const trans : TSQLHandle; const AParams : String) : boolean;
[...]
    s := ExtractSubStr(AParams,i,stdWordDelims);
    while s <> '' do
      begin
      if s='isc_tpb_write' then TPB := TPB + chr(isc_tpb_write)
      else if s='isc_tpb_read' then TPB := TPB + chr(isc_tpb_read)
      else if s='isc_tpb_consistency' then TPB := TPB +
                chr(isc_tpb_consistency)
      else if s='isc_tpb_concurrency' then TPB := TPB +
                chr(isc_tpb_concurrency)
      else if s='isc_tpb_read_committed' then TPB := TPB +                   
                chr(isc_tpb_read_committed)
      else if s='isc_tpb_rec_version' then TPB := TPB +
                chr(isc_tpb_rec_version)
      else if s='isc_tpb_no_rec_version' then TPB := TPB +
                chr(isc_tpb_no_rec_version)
      else if s='isc_tpb_wait' then TPB := TPB + chr(isc_tpb_wait)
      else if s='isc_tpb_nowait' then TPB := TPB + chr(isc_tpb_nowait)
      else if s='isc_tpb_shared' then TPB := TPB + chr(isc_tpb_shared)
      else if s='isc_tpb_protected' then TPB := TPB + chr(isc_tpb_protected)
      else if s='isc_tpb_exclusive' then TPB := TPB + chr(isc_tpb_exclusive)
      else if s='isc_tpb_lock_read' then TPB := TPB + chr(isc_tpb_lock_read)
      else if s='isc_tpb_lock_write' then TPB := TPB +
                chr(isc_tpb_lock_write)
      else if s='isc_tpb_verb_time' then TPB := TPB + chr(isc_tpb_verb_time)
      else if s='isc_tpb_commit_time' then TPB := TPB +
                chr(isc_tpb_commit_time)
      else if s='isc_tpb_ignore_limbo' then TPB := TPB +
                chr(isc_tpb_ignore_limbo)
      else if s='isc_tpb_autocommit' then TPB := TPB +
                chr(isc_tpb_autocommit)
      else if s='isc_tpb_restart_requests' then TPB := TPB +
                chr(isc_tpb_restart_requests)
      else if s='isc_tpb_no_auto_undo' then TPB := TPB +
                chr(isc_tpb_no_auto_undo);
[...]
"
Never used by me.


То есть - раз MSEgui наследует транзакцию от SQLDB, то автоматтом наследуется и вышеописаный код. Создаешь и настраиваешь нужный компонент(ы) "транзакция" ( их может быть сколько угодно, а в MSEgui есть даже фиктивный тип) - и вперед.
Но самому Мартину, фанату ЖарПтицы, с его огромным опытом - эта красота ни разу не понадобилась, он сперва даже не понял ,о чем идет речь :)
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5761
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Сообщение alexs » 26.08.2007 17:23:05

предупреждаю сразу - я неспорю - я просто спрашиваю:
прелесть двух транзакций в птице что можно сделать в одном компоненте доступа чтение данных через транзакцию только чтения (для птицы это значит, что ты не захватываеш на ней никаких ресурсов) а запись изменений делаеш в контексте короткой пишущей транзакции - т.е. вроемя захвата тобой конкретной записи минимально и серверу не надо на долго включать дорогостоящий (в смысле ресурсов) механизм контроля версий. - причём это всё реализуется прозрачно на уровне компоненты доступа к данным (что у меня в fbdataset, что в fibplus)
вот так можно сделать с помощью SQLDB в MSEgui?
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4063
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Сообщение debi12345 » 26.08.2007 17:30:33

а если серьёзно - на мой взгляд SQLDB - это очень ограниченная вещь (даже не смотря на красивый и сложный пример, показанные выше)

А в чем ограниченность ? Никто не мешает манипулировать с данными через прямые операции над первичной выборкой. А потом сохранить все изменения разом, используя параметры (чтобы не передавать SQL-текст для каждой записи ) - это делается автоматически по ApplyUpdates.
Есть вообще локальный режим ( в MSEgui), в котором FieldDefs создаются вручную, без первичной выборки. Идеально для хранения рабочих настроек программы, так как умеет оповещать об изменениях данных. Эдакий расширенный TMemDataSet.
Что еще ? BLOB читется и пишется. Никто не мешает создавать и удалять временные выборки и таблицы до и после выборки. Не пойму, какие ограничения ?

сколько одновременно работающих пользователей ?

У меня здесь больше вопросов вокруг блокировок (LOCK TABLE... ) возникало и возникает.
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5761
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Сообщение debi12345 » 26.08.2007 17:34:03

вот так можно сделать с помощью SQLDB в MSEgui?

Да, можно - так как см выше :
1) SQLDB принимает настроечные параметры транзакций;
2) MSEgui наследует и расширяет SQLDB-транзакцию.
3) транзакций может быть несколько, они могут назначаться и перезначаться между датасетами произвольно.
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5761
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Сообщение debi12345 » 26.08.2007 17:42:20

Скажу больше - MSEgui перевела в режим SQLDB даже SQlite (!!!) ( хотя сохранен и прежний компонент с аля-клиппер доступом).
Со всеми фишками типа работы с BLOB. Несмотря на скепсис "это невозможно" от Джуста&Co. Потому что овчинка стоила выделки.
Теперь у нас есть идеальный инструмент 1) для маленьких сверхскоростных БД-проектов и 2) обмена тесткэйсами и репортирования багов БД-компонентов.
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5761
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Сообщение Сергей Смирнов » 26.08.2007 17:49:35

debi12345 писал(а):
вот так можно сделать с помощью SQLDB в MSEgui?

Да, можно - так как см выше :
1) SQLDB принимает настроечные параметры транзакций;
2) MSEgui наследует и расширяет SQLDB-транзакцию.
3) транзакций может быть несколько, они могут назначаться и перезначаться между датасетами произвольно.
Тут речь не о параметрах транзакций. Имеется ввиду, что у Алексея и в фибплюсе на один датасет можно назначить ДВЕ транзакции ОДНОВРЕМЕННО, т.е. имеется 2 отдельных свойства.
Аватара пользователя
Сергей Смирнов
энтузиаст
 
Сообщения: 595
Зарегистрирован: 28.04.2005 13:23:25
Откуда: Москва

Сообщение Сергей Смирнов » 26.08.2007 17:52:34

А вот раз пошла такая пьянка, скажите мне кто-нибудь, а есть ли в SQLDB какая-нибудь поддержка автоинкрементных полей? Что-то я сходу как-то не нашел. Сейчас, конечно, попробую раскопать эту тему, но может быть кто знает?
Аватара пользователя
Сергей Смирнов
энтузиаст
 
Сообщения: 595
Зарегистрирован: 28.04.2005 13:23:25
Откуда: Москва

Сообщение Attid » 26.08.2007 18:48:02

Код: Выделить всё
сколько одновременно работающих пользователей ?


У меня здесь больше вопросов вокруг блокировок (LOCK TABLE... ) возникало и возникает.


ответа на вопрос не услышал. а от обьема уже и смотрится как там все работает , а красиво или некрасиво это второстепенно, главное надежноть.

у меня к примеру не корпарация на тысячи мест но на крупнейшем 20 человек добавляют даные непосредствено с компов, 7 автоматических рабочих мест и отчетики у начальства , ~4000 транзакций в день.

вот это я бы SQlite не доверил бы.

про транзакции тебе ответили что мартин их не использовал значит не приходилось связываться с большими проектами
про транзакции в птичке написанно тут про двойные транзакции у датасетов там правда нет, но почему их сделали к концу статью понимаешь.
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2586
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Сообщение debi12345 » 26.08.2007 19:25:24

Короче,Мартин заглянул кое-куда :
Код: Выделить всё
> Or does it mean to use a separate transaction for updating than for data
> fetching?

Yes. Smth like non-blocking transaction which opens only for a short while
to write the changes.

Так что если чего еще нет ( переключение транзакций для записи/чтения,.. ) и что РЕАЛЬНО имеет смысл, то через день-два будет сделано :)

А вот раз пошла такая пьянка, скажите мне кто-нибудь, а есть ли в SQLDB какая-нибудь поддержка автоинкрементных полей?

Не помню за SQLDB, но в MSEgui уже все есть. Даже визуальный компонент. Это не причуда - он иногда незаменим.

Что-то я сходу как-то не нашел. Сейчас, конечно, попробую раскопать эту тему, но может быть кто знает?

Сами виноваты - что бросили SQLDB на пол-пути. Чего и на кого теперь пенять ?

у меня к примеру не корпарация на тысячи мест но на крупнейшем 20 человек добавляют даные непосредствено с компов, 7 автоматических рабочих мест и отчетики у начальства , ~4000 транзакций в день.

Проблема кооперации прльзователей - только лочки таблиц или страниц. Все ! Открытая транзакция ни коим образом не мешает другим пользователям работать с БД, пока не выполняет COMMIT. На время записи другие пользователи висят на лочке. Именно поэтому эффект команды LOCK снимается автоматически после COMMIT. А уж вариантов лочек - выбирай не хочу в любом приличном сервере.
Записала, отвалила - работай дальше. Нафига здесь две транзакции, если одна транзакция просто ВРЕМЕННО переключается в нужный режим ?
Кстати, в MSEgui дабавлен механизм "DB events" (POSTGERSQL) - то есть о факте записи одним пользователем уведомляются другие пользователи - чтобы, например, сделать перезапрос обновлений. Это куда покруче !
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5761
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Сообщение debi12345 » 26.08.2007 19:49:26

Мартин как всегда "задержался" :

Код: Выделить всё
>>
>> Yes. Smth like non-blocking transaction which opens only for a short
>> while to write the changes.
>
> Good idea, I'll implement it.

Done, trunk 1503, experimental.


Причем не только для ЖарПтицы.
Последний раз редактировалось debi12345 26.08.2007 19:51:09, всего редактировалось 1 раз.
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5761
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Сообщение alexs » 26.08.2007 19:50:14

debi12345 писал(а):Нафига здесь две транзакции, если одна транзакция просто ВРЕМЕННО переключается в нужный режим ?

сидит 300 операторов, вбивают более 2000 документов в день с количеством строк в каждорм документе 10-40 - сколько лочек будет?
а ещё есть отчётность - это ещё операторов 30
в птице читающие транзакции ВОБЩЕ НИКАК не реагируеют на пишушие транзакции.

debi12345 писал(а):Кстати, в MSEgui дабавлен механизм "DB events" (POSTGERSQL)
в птице это называется Event-ы - и ты их можеш вешать в любом тригере/хранилке по своему желанию - но кстати, в большом проекте (как описал выше) рельно оператором очень редко надо видеть реальные сиюминутные данные - если уж надо - то нажмут на кнопку "обновить", а вот сеть от рассылки сообщений может повеситься.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4063
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Сообщение debi12345 » 26.08.2007 20:10:33

сидит 300 операторов, вбивают более 2000 документов в день с количеством строк в каждорм документе 10-40 - сколько лочек будет?

Одна запись (манипуляция пользователя ) пишется милисекунды. Это как тупо надо написать программу, чтобы запись влияла на других пользователей ?
У меня на работе подолгу ждут друг друга только шаги репликации "снизу" и шаги генерации новых наборов данных для репликации "наверх" - в идеале с учетом данных репликации "снизу", то есть подождать на лочке стоит того.

а ещё есть отчётность - это ещё операторов 30

Генерация отчетов с записью в БД обычно делается временные таблицы, ( по определению уникальные для каждого соединения, даже будучи одноименными ) - поэтому не пересекающиеся в принципе.

в птице читающие транзакции ВОБЩЕ НИКАК не реагируеют на пишушие транзакции.

А где они реагируют ? Ждут друг друга на лочке только пищущие транзакции.
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5761
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Пред.След.

Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 26

Рейтинг@Mail.ru
cron