настройки в sqlite

Место, где разработчики плагинов могут поделиться своим опытом.
Post Reply
User avatar
t-rex
Страшный и ужасный
Posts: 4900
Joined: Tue 15 Mar, 2005 16:17
Location: Tel-Aviv
Has thanked: 1 time
Contact:

настройки в sqlite

Post by t-rex » Fri 18 Mar, 2011 17:31

играюсь тут с переходом хранения настроек в sqlite. так как в sql я довольно слаб нужна помощь.

для начала, говорим только об настройках плагинов - т.е. древовидная структара с values любого типа.

значит, вот что я смог сделать для описания таблиц (по общей идеи zg):

Code: Select all

pragma foreign_keys = ON;
create table if not exists plugin_keys(id INTEGER PRIMARY KEY ASC, parent_id INTEGER, name TEXT NOT NULL, FOREIGN KEY(parent_id) REFERENCES plugin_keys(id) ON UPDATE CASCADE ON DELETE CASCADE);
create unique index if not exists plugin_keys_i1 on plugin_keys(parent_id,name);
create table if not exists plugin_values(id INTEGER PRIMARY KEY ASC, key_id INTEGER, name TEXT NOT NULL, type INTEGER NOT NULL, value BLOB, FOREIGN KEY(key_id) REFERENCES plugin_keys(id) ON UPDATE CASCADE ON DELETE CASCADE);
create unique index if not exists plugin_values_i1 on plugin_values(key_id,name);
для plugin_keys, id корня == NULL
для plugin_values, type это скажем 0-int64, 1-string, 2-binary

тут типа всё нормально, не? нужен ли вообще id для plugin_values?

теперь надо понять как правильно делать insert, delete и т.п., кто тут у нас sql (sqlite) спец?

например, как правильно "обновлять" существующий value? если у values всё таки есть id, должен ли он изменятся при replace или нет?

Примечание модератора
Смежная тема: FAR 3: (со)хранение конфигурации (настроек, истории, сеанса)

User avatar
HaRT
Moderator
Posts: 8605
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 77 times
Been thanked: 140 times

Re: настройки в sqlite

Post by HaRT » Fri 18 Mar, 2011 17:45

А действительно ли нужна древовидная структура именно в БД?
Не достаточно ли будет её эмулировать названиями вида Level1.Level2.Level3.OptionName?
Фар есть инструмент, а не нянька. © 2009 DrKnS

User avatar
zg
zero-gravity
Posts: 5533
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 85 times
Contact:

Re: настройки в sqlite

Post by zg » Fri 18 Mar, 2011 17:52

HaRT wrote:А действительно ли нужна древовидная структура именно в БД?
Не достаточно ли будет её эмулировать названиями вида Level1.Level2.Level3.OptionName?
а зачем эти проблемы с разбиением строк? опять же кто-то в имени точку заюзает.

User avatar
t-rex
Страшный и ужасный
Posts: 4900
Joined: Tue 15 Mar, 2005 16:17
Location: Tel-Aviv
Has thanked: 1 time
Contact:

Re: настройки в sqlite

Post by t-rex » Fri 18 Mar, 2011 17:56

небольшая поправка,
create table if not exists plugin_values(id INTEGER PRIMARY KEY ASC, key_id INTEGER NOT NULL, name TEXT NOT NULL, type INTEGER NOT NULL, value BLOB, FOREIGN KEY(key_id) REFERENCES plugin_keys(id) ON UPDATE CASCADE ON DELETE CASCADE);

чтоб нельзя было создавать values в корне.

User avatar
zg
zero-gravity
Posts: 5533
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 85 times
Contact:

Re: настройки в sqlite

Post by zg » Fri 18 Mar, 2011 17:57

t-rex wrote:например, как правильно "обновлять" существующий value? если у values всё таки есть id, должен ли он изменятся при replace или нет?
нет.

User avatar
chupakabra
Posts: 1024
Joined: Wed 27 Jul, 2005 19:36
Contact:

Re: настройки в sqlite

Post by chupakabra » Fri 18 Mar, 2011 18:02

играюсь тут с переходом хранения настроек в sqlite
Может лучше текстовый файл использовать? Чтобы было проще смотреть/редактировать?

User avatar
HaRT
Moderator
Posts: 8605
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 77 times
Been thanked: 140 times

Re: настройки в sqlite

Post by HaRT » Fri 18 Mar, 2011 18:04

zg wrote:а зачем эти проблемы с разбиением строк? опять же кто-то в имени точку заюзает.
На мой взгляд, древовидная структура здесь неоправданно усложнит структуру базы и SQL-запросов. Или предполагается иметь во многих ключах десятки тысяч значений?
Фар есть инструмент, а не нянька. © 2009 DrKnS

User avatar
ctapmex
Posts: 1008
Joined: Fri 11 Apr, 2008 07:53
Been thanked: 4 times
Contact:

Re: настройки в sqlite

Post by ctapmex » Fri 18 Mar, 2011 18:08

нужен ли вообще id для plugin_values?
а это зависит от того, что будет хранить фар в памяти для быстрого доступа
либо по id быстро и однозначно найдем/удалим/проапдейтим, либо все это придется делать ищя по имени и key_id. а это уже медленнее. но объем данных небольшой, может существенно и не сыграет роли.

User avatar
t-rex
Страшный и ужасный
Posts: 4900
Joined: Tue 15 Mar, 2005 16:17
Location: Tel-Aviv
Has thanked: 1 time
Contact:

Re: настройки в sqlite

Post by t-rex » Fri 18 Mar, 2011 18:19

тут конечно надо ещё понять как это всё будет работать с несколькими копиями фара

User avatar
zg
zero-gravity
Posts: 5533
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 85 times
Contact:

Re: настройки в sqlite

Post by zg » Fri 18 Mar, 2011 18:30

HaRT wrote:
zg wrote:а зачем эти проблемы с разбиением строк? опять же кто-то в имени точку заюзает.
На мой взгляд, древовидная структура здесь неоправданно усложнит структуру базы и SQL-запросов.
тот же SCTL_SUBKEY очень легко ложится на древовидную структуру. даже в памяти ничего хранить не надо. вообще root во всем сеттингс апи это plugin_keys.id. а вот со строками придётся возится. тот же енум и удаление будут тяжелее чем в варианте с деревом. плюс расход памяти на поддержку SCTL_SUBKEY.

User avatar
NightRoman
Posts: 5910
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 10 times
Been thanked: 11 times
Contact:

Re: настройки в sqlite

Post by NightRoman » Fri 18 Mar, 2011 18:36

t-rex wrote:тут конечно надо ещё понять как это всё будет работать с несколькими копиями фара
Я не спец, но википедия говорит, что читать могут несколько пользователей сразу, а писать только один в данный момент. Конфликтов почти никогда быть не должно, ибо запись будет обычно в результате каких-то действий юзера происходить, а он в данный момент только с одной копией Фара и работает.

User avatar
ctapmex
Posts: 1008
Joined: Fri 11 Apr, 2008 07:53
Been thanked: 4 times
Contact:

Re: настройки в sqlite

Post by ctapmex » Fri 18 Mar, 2011 18:39

t-rex wrote:тут конечно надо ещё понять как это всё будет работать с несколькими копиями фара
да скорее всего так же, как и с реестром. при коротких транзакциях на апдейт, блокировок не должно возникнуть.

User avatar
ctapmex
Posts: 1008
Joined: Fri 11 Apr, 2008 07:53
Been thanked: 4 times
Contact:

Re: настройки в sqlite

Post by ctapmex » Fri 18 Mar, 2011 18:40

HaRT wrote:На мой взгляд, древовидная структура здесь неоправданно усложнит структуру базы и SQL-запросов. Или предполагается иметь во многих ключах десятки тысяч значений?
усложнит правку руками на прямую. или поиск глазами по таблице. а так древовидная структура для базы данных оптимальна

Max Rusov
Posts: 3632
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Has thanked: 1 time
Been thanked: 10 times

Re: настройки в sqlite

Post by Max Rusov » Fri 18 Mar, 2011 21:32

t-rex wrote:играюсь тут с переходом хранения настроек в sqlite
Умеретьневстать. Только от реестра избавляться начали - новая напасть...

User avatar
Skirda
Posts: 3474
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 3 times

Re: настройки в sqlite

Post by Skirda » Fri 18 Mar, 2011 21:41

Max Rusov wrote:
t-rex wrote:играюсь тут с переходом хранения настроек в sqlite
Умеретьневстать. Только от реестра избавляться начали - новая напасть...
А почему нет?
Все рядом. Не более 500 кг прибавки к весу.
А ви таки придлагаете хмл? Таки это те же грабли, только вид с боку.

Я в интриге :popcorn:
We are the Borg. You will be assimilated.
So Say We All!

Max Rusov
Posts: 3632
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Has thanked: 1 time
Been thanked: 10 times

Re: настройки в sqlite

Post by Max Rusov » Fri 18 Mar, 2011 21:51

И как его смотреть? Как туда импортировать настройки? В комплекте будет плагин SQLLite browser?
Я бы сделал текстовые конфиги. По конфигу - на плагин. Для FAR-а, несколько.

Post Reply

Return to “Разработка плагинов”