![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 20.08.2010
Сообщений: 6
|
![]()
Нужен совет. Делаю торговую программу, необходимо обработать таблицу с реализацией товара (перенести данные в таблицу с остатками товара). Соответственно очень важен вопрос точности этого процесса и надежности, особенно на случай сбоя оборудования.
На сегодняшний момент есть такой вариант - все изменения в таблице кэшировать, в начале метода поставить bool переменную Maked равную false, а в конце метода, когда все действия выполнены установить в true. То есть проверкой на истинность Maked завершать метод и только тогда отправлять все изменения в таблицу. Дополнительно использовать еще одну таблицу для контроля, где прописывать дату переноса реализации в остатки и результат переноса, т.е. Maked. Насколько надежным будет такой метод, а то ведь в случае ошибки последствия могут оказаться очень серьезными. |
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,087
|
![]()
В нормальной СУБД всё это дело реализуется посредством транзакции.
|
![]() |
![]() |
![]() |
#3 |
Регистрация: 20.08.2010
Сообщений: 6
|
![]()
Читал я про транзакции. Но в моем учебнике даются общие видимо понятия об этом. Среди многих вариантов я выбрал описанный выше. Меня интересует (автор учебника этот момент не уточнил), что будет, если метод, обрабатывающий таблицу и вносящий изменения в другую, закончит свою работу нормально. Переменная проверки этого примет значение ИСТИНА, начнет выполняться команда Upgrate и в этот момент, к примеру, вырубится электричество.
Прошу также учесть, что необходимо будет обрабатывать таблицу в сотни, а возможно и свыше тысячи строк, так что вариант на каждую строку по транзакции не подходит. Небольшое уточнение по алгоритму Таблица 1 Список действий, которые необходимо выполнить. код товара количество, которое нужно списать. количество строк от 1 до 5 000 и более. Таблица 2 Список результатов вычислений. код товара количество, которое осталось количество строк от 50 до 3 000 - 5 000 Суть алгоритма - находится исходная строка за дату в Таблице 1 ищется соответствующий код в Таблице 2 и производится вычитание, в соотв. поле этой строки ставится отметка об обработке этой строки. Переход к следующей строке Таблицы 1 и повтор операции пока в Таблице 1 не закончатся строки. В конце работы накапливается от 1 до 3 000 изменений Таблицы 2 разных строк и от 1 до 5 000 в Таблице 1 по общему количеству обработанных строк. Если метод выполнен производится обновление данных в Таблице 1 и Таблице 2, требуется обеспечить либо полное обновление двух Таблиц, либо никакого с выводом сообщение об ошибке. До выполнения обновления у меня все продумано, интересует только сам этот процесс, поскольку пройти он должен за две транзакции. Уже начинаю думать, что проще написать именно такой алгоритм, а в нужный момент отрубить комп от электросети. P.S. Если что-то выше написанное покажется глупостью прошу меня простить, так как я пишу программу, одновременно читая учебники. |
![]() |
![]() |
![]() |
#4 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,087
|
![]()
Транзакция - есть атомарная операция. Всё, что происходит в рамках одной транзакции, либо выполняется целиком, либо не выполняется ничего (происходит откат уже совершенных действий в транзакции). В каждой СУБД этот момент реализуется по разному. Во всех нормальных системах отключение электричества приведёт в итоге к откату незавершенной транзакции.
Ну а уж как транзакции делать - Вам виднее. Можно одну на запись, а можно и заблокировать обе таблицы для других и одну транзакцию на всю эту операцию сделать. |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Точность типа float | HunterMan | Общие вопросы C/C++ | 6 | 07.02.2009 23:05 |
точность вывода переменной | XeN0N | Помощь студентам | 6 | 21.01.2009 16:30 |
Точность | Sour | Помощь студентам | 2 | 31.05.2007 21:08 |