Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как правильно организовать частые добавления в БД [D7, FB 1.5]


Страницы:   1 2 3

Ярослав ©   (2005-10-03 12:56:00) 

Ситуация такая - С устроойства через com port поступают данный, порядка 5 - 20 записей в секунду, мне все их нужно записать в БД, данные на экране пользователя должны обновляться 1 раз в секунду, как лучше добавлять  данные в БД
Каждую запись отдельно с подтверждением транзакции или к примеру пакетами 1 раз в секунду и подтверждать транцакцию для всего пакета, а не для каждой отдельной записи?


Курдль   (2005-10-03 16:53:00) [21]

ПОСЫПАЛ ГОЛОВУ ПЕПЛОМ!!! :)
И вправду я затуманен компонентами доступа с автокоммитом!
Транзакция ОТКРЫВАЕТСЯ автоматом при активном DML!

Но, повторяю, если нет нужды - лучше транзакции не мусолить!
Тем более, что открытая транзакция напрягает сервер БД.


Sergey13   (2005-10-03 16:52:00) [22]

2[32] ANB ©   (03.10.05 16:47)
Любой DDL запрос или (у меня вроде так) закрытие программы (сессии). Еще вроде комманды управления системой типа Alter Session.


ANB   (2005-10-03 16:47:00) [23]


> Sergey13 ©   (03.10.05 16:45) [31]
- а как в sql plus сделать неявный коммит ?


Sergey13   (2005-10-03 16:45:00) [24]

2[29] ANB ©   (03.10.05 16:41)
>Пока явно коммит не укажешь - ничего не запишется.
Достаточно и не явного. 8-)


ANB   (2005-10-03 16:42:00) [25]


> Андрей Жук ©   (03.10.05 16:39) [28]
- это еще надо соответствующий уровень изоляции поставить.


ANB   (2005-10-03 16:41:00) [26]


> Курдль ©   (03.10.05 16:07) [21]
- для оракла - пример ошибочный. Пока явно коммит не укажешь - ничего не запишется. А транзакция стартует в нем автоматически. Другое дело, если работаешь с компонентами доступа. Почти все (а других и не знаю), по умолчанию выдают коммит после каждого DML. Этот режим можно либо отключить, либо явно начинать транзакцию (начало транзакции на оракл не передается, ибо для него это бессмысленно).

Другое дело - MS SQL. Там даже в T-SQL предусмотрены команды явного начала транзакции. В противном случае - работает автокоммит. Можно ли его выключить - я не разбирался, так же не знаю, можно ли в мс скл коммитить без явного старта транзакции.

> Андрей Жук ©   (03.10.05 16:20) [24]

Если начнем переходить на личности, то ветку прикроют, а вам р/о опять влепят.


Андрей Жук   (2005-10-03 16:39:00) [27]

Естественно, разницы нет.
Пока не будет сделан COMMIT данные в не будут "закреплены".
Есть СУБД, в которых можно читать данные из неподтвержденных транзакций. Это, имхо, изврат.


Курдль   (2005-10-03 16:29:00) [28]


> Андрей Жук ©   (03.10.05 16:20) [24]
> insert into aaa values (2);


А если так:

insert into aaa values (2)
/

?


Evgeny V   (2005-10-03 16:24:00) [29]

Приношу извинения, за неправильное написание ника в посте 22. Пост 22 мой:-)


Курдль   (2005-10-03 16:22:00) [30]


> Evegny V   (03.10.05 16:08) [22]
> -транзакцию надо стартовать для каждого запроса, включая
> select, клиентом;
> - транзакция закрывается клиентом, включая select;


Транзакция для select обусловлена замысловатой "антиблокировочной" системой IB. Это совсем не плохо, но не говорит об обязательности открытия и закрытия транзакций! Это лишь позволит избежать блокировок при перекрестном доступе.


Андрей Жук   (2005-10-03 16:20:00) [31]


> Для чистоты эксперимента откройте "SQL Plus" от оракла
> (простейший интерфейс для работы с СУБД в виде
> командной строки) и исполните любую команду изменения
> данных! Уверяю, что никакого открытия или закрытия
> транзакции не потребуется, чтобы измененные данные
> утвердились в БД.

- Чем докажешь?
- Мамой клянусь!

Запускаем SQLPlus.
Создаем таблицу
SQL> create table aaa
 2  (a int);

Table created.


Делаем выборку
SQL> select * from aaa;

no rows selected

Открываем второй екземпляр SQLPlus.
Добавляем запись
SQL> insert into aaa values (2);

1 row created.

Делаем выборку в первом экземпляре
SQL> select * from aaa;

no rows selected

Делаем выборку во втором экземпляре
SQL> select * from aaa;

        A
----------
        2

Закрываем 1 и 2 экземпляр.
Запускаем заново. Делаем выборку
SQL> select * from aaa;

no rows selected


Делаем вывод. Тов. Курдль - вы с умным видом несете ахинею.


Sergey13   (2005-10-03 16:15:00) [32]

2[21] Курдль ©   (03.10.05 16:07)
>Уверяю, что никакого открытия или закрытия транзакции не потребуется, чтобы измененные данные утвердились в БД.

Остаются вопросы, когда это случится и не произойдет ли за это время авариии какой и хватит ли у сервака ресурсов для поддержания множества подобных сессий.


Evegny V   (2005-10-03 16:08:00) [33]

Курдль ©  >Если программист не открыл транзакцию насильственно ,то транзакция откроется, закроется или откатится автоматически под управлением СУБД.

Когда это произойдет для FB1.5?

Для IB скажем 6,5 (c 7 не работал не знаю) и FB1.5 нормальнымсчитается:

-транзакцию надо стартовать для каждого запроса, включая select, клиентом;
- транзакция закрывается клиентом, включая select;

Я не рассматриваю случаи, когда на себя это берут компоненты.

Насколько я читал, есть две модели работы с транзакциями, явного старта - это IB и клоны, есть и дргие субд, но не помню точно, какие. И вторая модель, это авто старта транзакции - это например оракл.  А вот автозакрытие?? Возможно  какие-то субд поддерживают, но не помню или не знаю. Закрытие по тайм-ауту или дисконнекту не рассматриваю в контексте данного вопроса.


Курдль   (2005-10-03 16:07:00) [34]


> Desdechado ©   (03.10.05 15:56) [20]
> если кто-то считает, что это не так, то он уже успел почуствовать
> на себе тлетворное влияние "интеллектуальных" компонентов
> далнейший диспут считаю бессмысленным.


Да не могу я диспут закрыть, не только потому, что Вы упрекнули меня в незнании "азбуки СУБД", но и чтобы Ваше мнение не заразило начинающих программистов!
Для чистоты эксперимента откройте "SQL Plus" от оракла (простейший интерфейс для работы с СУБД в виде командной строки) и исполните любую команду изменения данных! Уверяю, что никакого открытия или закрытия транзакции не потребуется, чтобы измененные данные утвердились в БД.


Desdechado   (2005-10-03 15:56:00) [35]

> то ее и закрывать не надо
открыться-то откроется (на большинстве СУБД), то вот закрыться она сама не пожелает, ибо это противоречит азбуке СУБД
если кто-то считает, что это не так, то он уже успел почуствовать на себе тлетворное влияние "интеллектуальных" компонентов

далнейший диспут считаю бессмысленным.

Кстати, 8 млн записей в сутки - не такое уж и большое кол-во для FB. Да и размер записи важен тоже. И автор ничего не говорил о времени их хранения. Может, накопление и анализ идет понедельный, а более древнее агрегируется и списывается...


Курдль   (2005-10-03 15:42:00) [36]


> Desdechado ©   (03.10.05 15:26) [17]
>  Еще раз повторю: за программиста никто не выдаст команды
> подтверждения транзакции. Разве только особо "интеллектуальные"
> средства доступа, "угадывающие" желания программиста (по
> сути - расслабляющие и сбивающие с толку).

До чего ж Вы упрямы! Если программист не открыл транзакцию насильственно (методами компонента доступа, либо соответствующим DML типа
BEGIN TRAN[SACTION] [ transaction-name ]
то ее и закрывать не надо!!! Напр, если написать
insert into TABLE_NAME (FIELD_NAME) value (1)
то транзакция откроется, закроется или откатится автоматически под управлением СУБД.


> ANB ©   (03.10.05 15:33) [18]
>  - точно, точно, пусть переходит на оракл !.
> ЗЫ. А куда столько инфы класть то ? Этож сколько места под
> все это надо ?

Надо еще подумать, как конфигурить оракл и на какое железо его ставить, чтобы через недельку он не сказал "до свидания, доступное дисковое пространство!".


ANB   (2005-10-03 15:33:00) [37]


> Я вот тут писал все это и вдруг решил посчитать 100 х 3600
> х 24 - это ж 8 640 000 записей в сутки!!!!!!!   Какой тут
> IB/FB??!!!!
 - точно, точно, пусть переходит на оракл !.
ЗЫ. А куда столько инфы класть то ? Этож сколько места под все это надо ?


Desdechado   (2005-10-03 15:26:00) [38]

> Вы бы заявляли не так категорично! А то ж обидно, что "чушь"
Если некие средства доступа к БД скрывают функциональность сервера, то это проблема этих средств и их пользователей. Еще раз повторю: за программиста никто не выдаст команды подтверждения транзакции. Разве только особо "интеллектуальные" средства доступа, "угадывающие" желания программиста (по сути - расслабляющие и сбивающие с толку).


ANB   (2005-10-03 15:22:00) [39]


> писать каждую запись отдельно... или какими нибудь пакетами
- критичность потери записей ?


Курдль   (2005-10-03 15:19:00) [40]


> Ярослав   (03.10.05 15:13) [14]
> Данные от устройства поступают непрерывно и целыми днями,
>  и 5 - 20 записей в секунду это текущая нагрузка, она может
> увеличиться до сотни записей в секунду, вот я и думаю как
> это сделать, писать каждую запись отдельно... или какими
> нибудь пакетами
> Другие пользователи могут только читать эти записи, не добовлять
> не редактировать их не могут, да и пользователей немного
> 2-3 максимум 10


ОК! Понятно, что разбиение на пакеты скорости не добавит.
Рекомендую сделать лабораторную работу - простенькую программу, записывающую данные в БД, по объему равные рабочим. Откатать ее на предполагаемой конфигурации, а потом уже принимать решение - либо принять, как есть, либо искать компромиссы (ограничивать скорость, ....
==========================================================

Я вот тут писал все это и вдруг решил посчитать 100 х 3600 х 24 - это ж 8 640 000 записей в сутки!!!!!!!   Какой тут IB/FB??!!!!


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо