CaBaT писал(а) 04. Сентября 2008 :: 08:19:to Александр Орефков:
Если можно, хотелось бы узнать, в связи с выявленными нюансами по работе 1sqlite, планируются ли какие либо радикальные изменения в функционале/интерфейсе компоненты?
Если честно, очень чешутся руки переписать все под 1sqlite, и в принципе в рамках моей специфики я скорее всего не столкнусь с описанными выше в этой ветке проблемами, но все таки объем работы достаточно большой и переделывать потом все будет довольно хлопотно, поэтому если не сложно, как разработчик, не мог бы ты высказать свою точку зрения по этому вопросу по состоянию на текущий момент?
Да в-принципе, пока только были проблемы с Begin/End ReadSequnce.
Сегодня почти доделал борьбу с этим, и есть ряд нюансов, которые как раз хотелось бы обсудить с сообществом пользователей.
Радикальных изменений в интерфейсе компоненты не будет.
Возможны некоторые изменения в общении с поставщиком данных для sqlite, благо в официальных релизах он еще не засветился.
Теперь по поводу ReadSequnce.
Удалось технически сделать возможность указывать для таблиц, применять ли для них ReadSequnce.
Работает это так:
В монопольном режиме ReadSequnce применяется всегда.
В разделенном режиме можно либо не применять ReadSequnce (меньше скорость последовательного чтения), либо применять (тогда таблица пытается заблокироватся на запись, и либо запрос вообще не сможет выполнится - не удалось заблокировать таблицу, либо другие юзеры не смогут писать в таблицу. Плюсы - увеличение скорости чтения).
Я конечно, могу сделать для объекта SQLiteQuery флаг - блокировать таблицы или нет, и тогда он будет влиять на режим применения блокировок ко всем таблицам в запросе. Однако есть и пограничные случаи, например:
Запрос в модуле проведения документа, что-нить читает из регистра и джойнится к справочнику. Очевидно, что в таком запросе в разделенном режиме хотелось бы к регистру применить ReadSequnce (потому что так и так в него никто не может в это время писать, а к таблице справочника не применять ReadSequnce, чтобы не мешать записывать в нее другим юзерам.
То есть надо как-то давать информацию запросу, какие таблицы блокировать, а какие нет.
SQLite не позволяет указывать хинты для таблиц, как MSSQL, типа (nolock).
Могу предложить два варианта:
1. В тексте запроса если хотим, чтобы для таблицы применялась блокировка, имя таблицы указывать с хитрым суффиксом/префиксом - например
select from Справочник_Номенклатура_Locked2. К объекту запроса добавить метод
Блокировать("Список,Таблиц")Какой из вариантов реализовать?
Замечу, что по умолчанию в разделенном режиме таблицы будут всегда читаться БЕЗ ReadSequnce, тк ПМСМ небольшое снижение скорости последовательного чтения данных гораздо выгоднее, чем завал системы транзакциями.
И спрошу еще у знатоков - при проведении 1С блокирует таблицы регистров сразу или при первой записи в них? Что-то там помню выясняли при попытках использовать фокс в модулях проведения.