Переключение на Главную Страницу Страницы: 1 ... 65 66 [67] 68 69 ... 79 ОтправитьПечать
Очень популярная тема (более 25 ответов) 1sqlite (число прочтений - 456700 )
alyuev
God Member
*****
Отсутствует


Гражданин Вселенной

Сообщений: 850
Местоположение: Одесса
Зарегистрирован: 07. Декабря 2007
Пол: Мужской
Re: 1sqlite
Ответ #990 - 04. Июля 2018 :: 15:30
Печать  
Только не нашел на официальном сайте описание новых возможностей. Можешь подсказать?
Нашел: http://www.sqlite.org/draft/windowfunctions.html
  

1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
Наверх
IP записан
 
Sserj
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 77
Зарегистрирован: 25. Октября 2010
Re: 1sqlite
Ответ #991 - 06. Июля 2018 :: 13:30
Печать  
А никак нельзя в 1sqlite грязное чтение реализовать. Или таки движок 1С полностью файлы блокирует?
А то посмотрел сколько переписывать для перехода на MSSQL аж дрожь взяла Улыбка
  
Наверх
 
IP записан
 
Djelf
God Member
*****
Отсутствует


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 631
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: 1sqlite
Ответ #992 - 06. Июля 2018 :: 14:01
Печать  
Sserj писал(а) 06. Июля 2018 :: 13:30:
А никак нельзя в 1sqlite грязное чтение реализовать. Или таки движок 1С полностью файлы блокирует?
А то посмотрел сколько переписывать для перехода на MSSQL аж дрожь взяла Улыбка


В смысле грязное? Прямое чтение dbf? Так 1sqlite фактически и читает их напрямую, только движок чтения dbf 1С`овский, а не сторонний.
На этом форуме как то сравнивали скорость запросов foxpro и sqlite3, фокс тогда был быстрее, но сейчас sqlite3 кое где быстрее.
А отставание от фокса из-за преобразования в/из utf8.
ИМХО Не должно сильно ускорится на каком то альтернативном движке.
  
Наверх
www  
IP записан
 
Sserj
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 77
Зарегистрирован: 25. Октября 2010
Re: 1sqlite
Ответ #993 - 06. Июля 2018 :: 14:13
Печать  
Djelf писал(а) 06. Июля 2018 :: 14:01:
В смысле грязное?


Это то что with nolock в mssql дает. Чтение незакрытых транзакций. Пример ставим в модуле документа вопрос. Проводим его в одной сессии. В другой сессии 1sqlite на запросе по журналу документов зависнет, пока документ не проведется. MSSQL с nolock спокойно выполнит запрос.
  
Наверх
 
IP записан
 
Djelf
God Member
*****
Отсутствует


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 631
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: 1sqlite
Ответ #994 - 06. Июля 2018 :: 15:32
Печать  
Sserj писал(а) 06. Июля 2018 :: 14:13:
Djelf писал(а) 06. Июля 2018 :: 14:01:
В смысле грязное?


Это то что with nolock в mssql дает. Чтение незакрытых транзакций. Пример ставим в модуле документа вопрос. Проводим его в одной сессии. В другой сессии 1sqlite на запросе по журналу документов зависнет, пока документ не проведется. MSSQL с nolock спокойно выполнит запрос.


Ну так то MSSQL, там совсем по другому принципу блокировки.
Пытался http://www.1cpp.ru/forum/YaBB.pl?num=1214205575/873#873
Ничего хорошего в итоге не вышло. База начинает глючить, рисковать и дальше желания маловато...

Эх... а ведь Wirth (автор Вирт:V7DBNet) почти сделал dbeng32 на движке sqlite3. Во всяком случае база загрузилась из архива и даже работала.
Вот с таким движком можно было бы и разгуляться.
Но все это осталось только в https://web.archive.org/web/20170107160116/http://www.wirth.ru:80/forum/showtopi...

А может и это при каких то параметрах сработает. Но не пробовал.
https://infostart.ru/public/16268/
https://infostart.ru/public/87339/

  
Наверх
www  
IP записан
 
Djelf
God Member
*****
Отсутствует


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 631
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: 1sqlite
Ответ #995 - 24. Сентября 2018 :: 17:21
Печать  
Релиз 3.25.1.23 https://cloud.mail.ru/public/9znr/ZJ6ULE9aR

РазрешитьDelete(1/0) уже было анансировано, остальное тут https://www.sqlite.org/releaselog/3_25_1.html

Ну зачем, ну зачем Подмигивание
Невозможность переименовать колонку это была фича sqlite!
Устранили...

P.S. в оконных функциях баг/не баг но есть нюанс

CREATE TABLE t (v1,v2);

select sum(v2) OVER (PARTITION BY v1) from t
выдает корректный результат

select sum(v2) OVER (PARTITION BY v2) from t
GROUP BY v1

выдает НЕ корректный результат, т.к. не группирует строки
PostgreSql на это ругается и не выполняет

правильный вариант

select sum(sum(v2)) OVER (PARTITION BY v2) from t
GROUP BY v1

т.е. при GROUP BY будет нужна двойная группировка!!!

P.P.S. Пример использования возможно будут, но не прямо сейчас.

  
Наверх
www  
IP записан
 
Djelf
God Member
*****
Отсутствует


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 631
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: 1sqlite
Ответ #996 - 25. Сентября 2018 :: 12:23
Печать  
Набросал пример... Выглядит жутковато Подмигивание
Но SQLiteQuery это выполняет за 400мс, против 6900мс у Запроса 1С.

Код (SQL)
Выбрать все
	Период с ВыбНачПериода по ВыбКонПериода;
	Количество = Регистр.ОстаткиТМЦ.Количество;
	Номенклатура = Регистр.ОстаткиТМЦ.Номенклатура;
	Функция КоличествоНачОст = НачОст(Количество);
	Функция КоличествоПриход = Приход(Количество);
	Функция КоличествоРасход = Расход(Количество);
	Функция КоличествоКонОст = КонОст(Количество);
	Группировка День все;
	Группировка Номенклатура без групп все ВошедшиеВЗапрос;
 



Код (SQL)
Выбрать все
WITH DateT (date) AS (  SELECT :НачДата UNION ALL SELECT date(date,'+1 day') FROM DateT WHERE date< :КонДата)

SELECT
	Дата
	,Номенклатура [Номенклатура $Справочник.Номенклатура]
	,НачОст+total(Приход-Расход) OVER ( PARTITION BY Номенклатура ORDER BY Дата ROWS BETWEEN  UNBOUNDED PRECEDING AND 1 PRECEDING) НачОст
	,Приход
	,Расход
	,НачОст+total(Приход-Расход) OVER ( PARTITION BY Номенклатура ORDER BY Дата) КонОст
FROM (
	SELECT
		t1.Дата
		,t2.Номенклатура
		,total(t4.НачОст) НачОст
		,total(t3.Приход) Приход
		,total(t3.Расход) Расход
FROM (
	SELECT date AS Дата from DateT) as t1
	,(SELECT DISTINCT Номенклатура  FROM Регистр_ОстаткиТМЦ WHERE DATE BETWEEN :НачДата AND :КонДата ) as t2
	LEFT JOIN ( SELECT
		Date AS Дата
		,Номенклатура
		,sum(case DEBKRED when 1 then 0 else Количество end) Приход
		,sum(case DEBKRED when 1 then Количество else 0 end) Расход
	FROM Регистр_ОстаткиТМЦ
	WHERE Date BETWEEN :НачДата AND :КонДата
	GROUP BY Дата,Номенклатура
	) as t3 ON t3.Дата = t1.Дата AND t3.Номенклатура=t2.Номенклатура
	LEFT JOIN ( SELECT
		date(Period,'+1 months') AS Дата
		,Номенклатура
		,sum(Количество) НачОст
	FROM РегистрИтоги_ОстаткиТМЦ
	WHERE PERIOD = date( :НачДата,'-1 months')
	GROUP BY Номенклатура
) as t4 ON t4.Номенклатура=t2.Номенклатура
GROUP BY t2.Номенклатура,t1.Дата)
GROUP BY Номенклатура,Дата
 

  
Наверх
www  
IP записан
 
alyuev
God Member
*****
Отсутствует


Гражданин Вселенной

Сообщений: 850
Местоположение: Одесса
Зарегистрирован: 07. Декабря 2007
Пол: Мужской
Re: 1sqlite
Ответ #997 - 02. Октября 2018 :: 13:32
Печать  
Что-то у меня ругается - near "(": syntax error - в строке

,НачОст+total(Приход-Расход) OVER (PARTITION BY ТМЦ ORDER BY Дата) as КонОст

и аналогично в предыдущей с НачОст.
  

1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
Наверх
IP записан
 
alyuev
God Member
*****
Отсутствует


Гражданин Вселенной

Сообщений: 850
Местоположение: Одесса
Зарегистрирован: 07. Декабря 2007
Пол: Мужской
Re: 1sqlite
Ответ #998 - 02. Октября 2018 :: 13:37
Печать  
А... соррии... Подгрузилась старая библиотека.....
  

1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
Наверх
IP записан
 
alyuev
God Member
*****
Отсутствует


Гражданин Вселенной

Сообщений: 850
Местоположение: Одесса
Зарегистрирован: 07. Декабря 2007
Пол: Мужской
Re: 1sqlite
Ответ #999 - 06. Ноября 2018 :: 12:02
Печать  
Djelf, недавно для себя открыл такую удивительную штуку в SQL запросах, как ROLLUP, CUBE и GROUPING SETS.

ROLLUP - делает промежуточные итоги по группам, то, что делает 1С-ный запрос.
Почитать про это можно здесь: https://info-comp.ru/obucheniest/444-sql-rollup-cube-grouping-sets.html

Но, к сожалению, ни ROLLUP, ни GROUPING SETS пока не реализованы в 1SQLite. И не известно, будут ли реализовывать в ближайшем времени.
(ROLLUP можно заменить эквивалентом GROUPING SETS, если что).

У себя на работе я сделал класс, который умеет группировать ТЗ  - почти полный аналог того, как это делает Запрос и даже местами больше.  Можно либо вывести в ТЗ, либо обходить группировки, как это делается в Запросе.

И вот вопрос - можно ли как-то сделать подобие RollUp, например, через CTE? Или еще как?

(И еще - нашел интересную таблицу сравнения возможностей разных SQL баз - http://www.sql-workbench.net/dbms_comparison.html)

PS/ Следующий пост юбилейный в этой ветке: 1000й!
  

1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
Наверх
IP записан
 
Djelf
God Member
*****
Отсутствует


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 631
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: 1sqlite
Ответ #1000 - 06. Ноября 2018 :: 15:22
Печать  
Что-то не могу найти пост Hipp`а... Надо было закладку закинуть ;(

Но в нем он сказал примерно следующее: Когда мы обсуждали с инвесторами развитие sqlite, они меня очень просили не выходить за пределы объема в * мегабайт /*насколько помню сообщение, в пределах мегабайта или даже 3х*/, но в последнее время это становится не так актуально, поэтому я позволил просочится некоторым новым возможностям в sqlite.

Мы все можем видеть, что Hipp сделал значительно больше чем обещал.

Так что возможно что эти расширения появятся, но они как бы поверх оконных функций, которые только введены. Есть шанс, что после "обкатки" оконных будут реализованы и эти возможности.

Сейчас эти расширения можно реализовать через union all + windows functions, но увы - со штрафом из-за повторного сканирования таблиц.

В принципе можно и через cte, но у cte /*imho*/ штраф будет значительно больше.

P.S. группировать в тз то можно, но в ит - значительно проще.

P.P.S. точно 1000й Подмигивание
  
Наверх
www  
IP записан
 
alyuev
God Member
*****
Отсутствует


Гражданин Вселенной

Сообщений: 850
Местоположение: Одесса
Зарегистрирован: 07. Декабря 2007
Пол: Мужской
Re: 1sqlite
Ответ #1001 - 06. Ноября 2018 :: 15:34
Печать  
Ну, я, вообще говоря, класс сделал наследником ИТЗ. Так что там внутри вся каша на ИТЗ варится.

И изначально чей-то класс взял за основу. Не помню уже, к сожалению, чей.
  

1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
Наверх
IP записан
 
ADirks
1c++ developer
1c++ moderator
Отсутствует


А нужны ли мы нам?

Сообщений: 692
Местоположение: Новосибирск
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #1002 - 07. Ноября 2018 :: 05:54
Печать  
alyuev писал(а) 06. Ноября 2018 :: 15:34:
Ну, я, вообще говоря, класс сделал наследником ИТЗ. Так что там внутри вся каша на ИТЗ варится.

И изначально чей-то класс взял за основу. Не помню уже, к сожалению, чей.

Лучше б ты вот это взял за основу Улыбка  http://www.1cpp.ru/forum/YaBB.pl?num=1202201945
Все эти роллапы на мой взгляд в SQL не нужны. Это должен делать движок отчётов, а не источник данных. Зачастую всё равно приходится считать так, что невозможно такое в универсальный движок запихнуть.
  
Наверх
 
IP записан
 
alyuev
God Member
*****
Отсутствует


Гражданин Вселенной

Сообщений: 850
Местоположение: Одесса
Зарегистрирован: 07. Декабря 2007
Пол: Мужской
Re: 1sqlite
Ответ #1003 - 07. Ноября 2018 :: 09:14
Печать  
Я нашел, чей класс использовал: "ТаблицаГруппировок" trad'a. http://www.dev.citykirov.ru/
Он как раз и затеял в нём реализацию подмены объекта Запрос с обходом группировок.
  

1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
Наверх
IP записан
 
Sserj
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 77
Зарегистрирован: 25. Октября 2010
Re: 1sqlite
Ответ #1004 - 03. Января 2019 :: 03:59
Печать  
alyuev писал(а) 06. Ноября 2018 :: 12:02:
...
И вот вопрос - можно ли как-то сделать подобие RollUp, например, через CTE? Или еще как?
...


Djelf писал(а) 06. Ноября 2018 :: 15:22:
...
В принципе можно и через cte, но у cte /*imho*/ штраф будет значительно больше.
...


Вообще можно именно через CTE делать полностью линейный обход остатков в виде дерева, но важно помнить что CTE не кэширует результаты а каждый раз формирует их из базы.
Поэтому нужно совместить приятное с полезным - дерево групп и остатки поместить во временные таблицы и потом уже строить дерево остатков из них, тогда вся работа будет в памяти.
К примеру у меня запрос остатков выполняется 840мс , дерево групп за 10мс. Потом построения дерева остатков за 200мс.

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



  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 ... 65 66 [67] 68 69 ... 79
ОтправитьПечать