<< Click to Display Table of Contents >> Navigation: БД разведочных выработок > Одновременное редактирование БД несколькими пользователями |
В программе предусмотрена возможность одновременного редактирования файла БД несколькими пользователями. При этом имеются следующие ограничения:
- не должна изменяться структура БД, т.е. нельзя добавлять или удалять столбцы или таблицы, изменять тип данных в столбцах, изменять расчетные формулы или параметры расчетных таблиц;
- разные пользователи не должны одновременно редактировать одну и ту же выработку;
- разные пользователи не должны добавлять выработки с одинаковыми названиями.
Для лучшего понимания процесса одновременного редактирования БД несколькими пользователями рассмотрим особенности реализации этого в программе DIGIMINE.
При чтении файла с диска, файл полностью загружается в оперативную память. Образ файла в памяти напрямую не связан с файлом на диске. Любые операции по редактированию БД в процессе работы программы не оказывают никакого влияния на файл, записанный на диске.
Изменение файла на диске производится только после того, как пользователь задает сохранение файла на диск (используя пункты меню, либо кнопки графического меню проекта).
В том случае, когда файл редактируется одним пользователем, происходит простая запись на диск.
Если перед записью на диск обнаруживается, что файл на диске уже отличается от того, который был на момент чтения с диска, то значит, что файл уже был кем-то изменен.
Программа попытается применить те операции редактирования, которые были выполнены пользователем в текущем сеансе работы (текущий сеанс отсчитывается с момента последней записи на диск или с момента первого чтения, если записи еще не было) к файлу, который записан на диске. Если это возможно, то программа производит соответствующие преобразования и изменяет файл на диске. Кроме того, в оперативную память подгружаются все изменения, сделанные и сохраненные на диске другими пользователями.
После сохранения файла на диске образ БД в оперативной памяти (естественно и в таблицах, выводимых в окно БД) будет содержать все изменения, сохраненные на данный момент времени другими пользователями. Одновременно появляется возможность редактировать те выработки, которые были изменены (и сохранены!) другими пользователями. То есть ограничение на одновременное редактирование одной и той же выработки действует только до момента сохранения на диск.
Например, если пользователь А изменил и сохранил выработку на диске, то редактирование этой выработки для пользователя Б будет возможным после того, как пользователь Б произведет сохранение на диск, в результате чего у пользователя Б произойдет загрузка всех изменений пользователя А (при условии, что пользователь А уже закончил редактирование выработки и больше не собирается ее изменять). Кстати, если пользователь Б задаст сохранение на диск даже не выполнив никаких операций редактирования, это приведет к загрузке всех изменений, сделанных другими пользователями.
Поэтому, при одновременном редактировании одного файла несколькими пользователями, желательно чаще производить запись на диск.
В тех случаях, когда программа не может применить операции редактирования без нарушения изменений, выполненных другими пользователями, выдается сообщение об этом.
Например, если два пользователя одновременно редактировали одну и ту же выработку, то запись на диск возможна только для того, кто первым осуществил эту запись.
Для второго пользователя будет выдано сообщение, подобное тому, которое показано выше. В данном случае возникла ситуация, при которой сохранение информации по выработке C-011 может привести к ликвидации изменений, сделанных другим пользователем, что недопустимо.
Если ответить "Да", то программа продолжит поиск ошибочных, с точки зрения совместного редактирования файла, ситуаций, если "Нет", то прекратит проверку без записи на диск.
Кроме рассмотренного выше сообщения об ошибке возможно появление следующих сообщений:
Обратите внимание, что в сообщениях об ошибках кроме названия выработки встречается идентификатор выработки (ID). Столбец с идентификаторами выработок (в таблице со списком выработок) по умолчанию является скрытым, но при желании его можно сделать видимым, используя пункт всплывающего меню "Показать скрытые столбцы…".
Как и название выработки, идентификатор выработки также является уникальным в пределах файла БД. Однако, в отличие от названия выработки, которое может быть изменено пользователем, идентификатор выработки присваивается программой и не может быть изменен пользователем.
При добавлении новых выработок разными пользователями возможно временное появление выработок с одинаковыми идентификаторами в оперативной памяти компьютеров разных пользователей. Однако при записи на диск производится корректировка идентификаторов таким образом, чтобы обеспечить их уникальность. В связи с этим, в сообщениях об ошибках возможно появление двух идентификаторов для одной выработки. Например, в последнем из приведенных выше примеров сообщений об ошибках записано ID=3880/3883. Это означает, что в сохраняемой БД новой выработке при создании был присвоен идентификатор 3880, однако на диске уже есть выработка с таким идентификатором, и поэтому для записи на диск данной выработке должен быть присвоен идентификатор 3883.
Если в диалогах с сообщениями об ошибках все время отвечать "Да", т.е. продолжить выявление ошибок, программа по очереди сообщит обо всех проблемных ситуациях, из-за которых нет возможности применить операции редактирования, сделанные в текущем сеансе работы. После того, как обо всех ошибках будет последовательно сообщено, появится обобщающая информация:
Далее можно либо отказаться от сохранения БД в файл, либо все-таки осуществить запись на диск (с потерей тех операций текущего сеанса редактирования, которые не могут быть применены к файлу, находящемуся на диске).
Обычно сначала выбирается продолжение по варианту 1, без сохранения в файл. Затем выполняется анализ выявленных ошибочных ситуаций. Если сохранение на диске только тех операций редактирования, которые можно применить к файлу на диске не приведет к большим потерям, можно повторно попытаться сохранить файл на диск, но уже с согласием на потерю части работы, выполненной в текущем сеансе редактирования. Для того чтобы не повторять теряемые при таком сохранении на диск операции редактирования полностью заново, можно скопировать некоторую информацию в буфер обмена либо экспортировать в текстовый файл, для того, чтобы потом было быстрее ее восстановить.
В том случае, когда пользователь не желает терять введенную в текущем сеансе информацию, тогда файл БД записывается под другим именем с тем, чтобы далее разобраться с ошибками и отредактировать исходный файл БД с учетом изменений, сделанных в текущем сеансе работы.
Обратим внимание на то, что сообщения об ошибках, выдаваемые в процессе их выявления, записываются в окно с информацией о работе программы, т.е. сохраняются там для дальнейшего анализа. Окно с информацией о работе программы можно показать (скрыть) при нажатии на кнопку в графическом меню.