Имя: Пароль:
IT
 
JSON "язык" запросов к объектам
,
0 Garykom
 
гуру
20.11.16
01:42
Как понимаем появление "языка запросов 1С" (как некой копии с дополнениями стандартного SQL) это вынужденная мера для предметно ориентированной системы, которая является подмножеством объектно-ориентированной.
Ибо данные то хранятся в обычных реляционных БД и приходится проецировать метаданные (объекты) в таблицы/записи. Отсюда вариация обычного SQL становится самой быстрой, банальная трансляция из "языка запросов 1С" в стандартный диалект SQL конкретной базы данных и все зависит от ее скорости.

Но вот изобретая лисапед пришел к выводу что SQL подобный язык для объектов не нужен, нужно нечто другое которое позволит выполнять аналогичную задачу но с более удобной записью.
Понятно что это в случае не использования обычных реляционных БД а простых хранилищ документов или значений.

Нашел несколько теории http://citforum.ru/database/articles/art_20.shtml
И даже нечто работающее https://www.npmjs.com/package/json-sql, но это просто обертка над SQL стандартным.

По сути хочется описал в JSON результирующий требуемый объект или объекты которые хочется получить, например выборка "остатки на складах":
[{"Номенклатура":"Справочники.Номенклатура","Остаток":"Число"}]

Далее указать для свойств этого результирующего объекта откуда брать данные и как их соединять (операции над множествами):
"Источники":["Справочники.Номенклатура","РегистрыНакопления.Остатки"],
"Операция":"Объединение",
"Условия":["Остаток>10","Номенклатура.Группа=&Параметр1"]

И получить результат в виде множества новых или существующих "объектов".

Кто видел/знает подобное или может занимался таким извратом?

Смысл что хочу максимальное упрощение для "программиста" составления "запросов" на подобном "языке", но с сохранением гибкости и мощности обычного SQL.

Ибо сложные вложенные составные/вложенные запросы на "языке запросов 1С" когда они много строчек разбирать без конструктора нереально сложно. Тут же более наглядно будет видна вложенность и последовательность выполнения операций.
1 Garykom
 
гуру
20.11.16
01:47
(0)+ Ошибся, правильнее "Операция":"Пересечение"

ибо http://www.bymath.net/studyguide/sets/sec/sets2.htm
2 Torquader
 
20.11.16
01:53
Просто, объектно-ориетнированные базы данных не взлетели.
А так - там можно было писать выборку прямо по объектам.

Просто то, что ты пытаешься сделать - это некоторый аналог 1С 7.7 - там вместо SQL языка была придумана какая-то муть, позволяющая что-то отбирать и что-то указывать.

В твоём примере пишется:
SELECT FROM [Справочник.Номенклатура],[РегистрНакопления.Остатки]VALUES[Справочник.Номенклатура].[Ссылка],[РегистрНакопления.Остатки].Количество WHERE [Справочник.Номенклатура].Группа=&Параметр1 AND [РегистрНакопления.Остатки].Количество>10 AND [Справочник.Номенклатура].[Ссылка]=[РегистрНакопления.Остатки].[Номенклатура]

То есть, в нормальном SQL есть такое понятие, как прямое произведение таблиц, что в 1С почему-то не вспоминают.
В том же Microsoft Access именно так и писалось.
3 Garykom
 
гуру
20.11.16
01:56
(2) Да сразу про аналог "запросов 1С 7.7" тоже подумалось, но там урезали только выборка и соединение.

По сути и хочу но запись не в одну строку (которую парсить сложнее чем JSON) а в неком другом более удобном виде, вот и все.
4 Torquader
 
20.11.16
02:00
(3) Тогда получится тот же самый SQL только записанный по-другому.
5 Garykom
 
гуру
20.11.16
02:02
Гм действительно так ((

"SELECT":{
"FROM":["Справочник.Номенклатура","РегистрНакопления.Остатки"],
"VALUES":["Справочник.Номенклатура.Ссылка","РегистрНакопления.Остатки.Количество"],
"WHERE":[...]
]
}
6 Garykom
 
гуру
20.11.16
02:03
(4) Получается ничего лучше чем SQL банально не изобрести? Печально ((
7 Torquader
 
20.11.16
02:03
(5) И, по-мойму, это называется "конструирование уникальной модели колёсного средства передвижения приводимого в движение мускульной силой"
8 Garykom
 
гуру
20.11.16
02:05
9 Torquader
 
20.11.16
02:06
(6) Просто SQL с тех времён, когда была командная строка.
Изобрести можно - функции-итераторы называется.
Но, если с помощью SQL можно построить оптимальный запрос, так как условия могут выбираться по индексам, то итераторы - это полное сканирование, что не всегда оптимально.
Просто, индекс можно рассматривать как кеш результатов итератора - тогда индексы будут динамическими и подстраиваться под задачи - но это, видимо, очень далёкое будущее.
10 Torquader
 
20.11.16
02:06
То, что хочется - это самокат-электропед - как-то даже звучит не очень.
11 b_ru
 
20.11.16
02:07
(6) SQL прекрасен и не нуждается в улучшениях. Всякие ООБД придумывают гуманитарии, которые не смогли.
А так то о тебе позаботилась фирма 1С, СКД вполне себе позволяет объектно конструировать запросы без всякого SQL. Конечно, это ересь, не нужная здравомыслящему человеку, но таки оно есть.
12 Garykom
 
гуру
20.11.16
02:08
(9) Кстати да, тоже приходило в голову про динамические индексы, которые сами по результатам запросов на лету строятся "на будущее".

Нечто похожее на VIEW (https://ru.wikipedia.org/wiki/Представление_(базы_данных)) стандартные, которые автоматически обновляются при записи/изменении данных в исходных таблицах.
13 Garykom
 
гуру
20.11.16
02:10
(11) SQL прекрасен для реляционных БД обычных, но не для объектных с предметно-ориентированными.
14 Garykom
 
гуру
20.11.16
02:12
(11) Да СКД великая штука, но без "Набор данных - запрос" она уже не столь велика.
15 Torquader
 
20.11.16
02:13
(14) Конструктор SQL и ничего более.
16 b_ru
 
20.11.16
02:15
(13) Возникает вопрос, что понимать под объектной предметно-ориентированной БД? Если это настоящее nosql хранилище, то там sql попросту нет, приходится выкручиваться. А если это эмуляция каких-то там объектов и иерархии, например 1С, то sql там все равно удобнее.
(14) Оно умеет как-то программной схему запроса составлять, вообще ни одной строчки на языке запросов писать не надо. Еще в Построителе что-то подобное было, а тут это довели до логического конца. Получилось ожидаемо непонятно.
17 Torquader
 
20.11.16
02:16
Опять же, взять к примеру тот же 1С.
Мы хотим, чтобы у справочника "Номенклатура" появилось дополнительное поле - или открывать конфигуратор и добавлять его в таблицу с перестроением всей таблицы или добавлять через механизм, в который мы только что учили писать дятла - но там про быстрый поиск можно забыть.

А если у нас объекты - то добавил поле - у новых объектов оно появилось, а у старых - значение по умолчанию.
18 Garykom
 
гуру
20.11.16
02:18
(15) Угу проблема что на изучение даже половины возможностей этого конструктора требуется просто дофига времени.
В условиях когда спецов хрен найдешь понижение времени обучения (порога входа) становится актуальным.

Сча спецы (именно спецы знающие/опытные) нарасхват, а новичков ("типа программист 1С") только много.
И когда новичок банальную задачку решает на порядки (в десятки раз блин!) медленнее чем спец, а з/п то хочет всего в 2-3 раза меньше чем спец это тоскливо...
19 Torquader
 
20.11.16
02:18
nosql - там обычно ключ=>значение.
То есть, грубо говоря, от индексов отказались - и только прямое сканирование.
20 Garykom
 
гуру
20.11.16
02:18
(17) Дык проецирование в реляционную БД же у 1С, поэтому такое с новыми полями.
21 Garykom
 
гуру
20.11.16
02:20
(19) Ага подумал что при прямом сканировании можно язык запросов упростить офигенно. Точнее все сложные запросы будут состоять из кучи подзапросов с "В (&Список)"
22 Torquader
 
20.11.16
02:22
(20) Просто, в объектно-ориентированной в страничках хранятся объекты. При этом, грубо говоря, получается, что все объекты в одной большой произвольной таблице.
Но, можно строить индексы по полям объекта, и в него попадут только те, у кого этот индекс есть.
Опять же, значения полей можно тоже хранить как ссылки на место, где это значение записано, и несколько одинаковых длинных строк будут хранится в одном месте - поиск будет в разу быстрее.
23 Garykom
 
гуру
20.11.16
02:24
(22) Но проблема нормализации данных и соединений разных объектов.
24 Torquader
 
20.11.16
02:24
+ там запросил итератор - и сказал "поддерживать" и вот вам индекс для выборки по итератору.
25 Torquader
 
20.11.16
02:26
(23) Так связь - это тоже объект.
Плюс - история изменений - любое действие - это изменение объектов - предыдущие версии не стираются, а остаются - можно в любой момент увидеть то, что было когда-то.
26 Garykom
 
гуру
20.11.16
02:28
(24) Угу только вот в 1С "документ" это типа один объект, а по факту в БД это куча таблиц включая записи ТЧ - куча объектов.
И при перепроведении документа придется или храним в ООБД документ как одно целое (читать целиком накладно) или кучу объектов "записей ТЧ" что будет накладно их перебор с отбором по полю-владельцу.
27 Torquader
 
20.11.16
02:28
Просто, сейчас в базе есть таблицы, в которых ссылки на ключевые поля других таблиц.
В объектной базе ссылки будут сразу на места, где хранятся объекты. То есть не нужно будет идти в следующую таблицу и читать значение полей объекта - мы уже сразу там.
28 Garykom
 
гуру
20.11.16
02:29
(25) Кстати да, когда связь между объектами это тоже объект возникает интересная ситуация "перебора связей" а это накладные расходы еще.
29 Torquader
 
20.11.16
02:29
(26) В любом случае, объект будет занимать несколько блоков памяти - и не всегда последовательно идущих, так как объект может подрасти в процессе работы с ним.
30 Garykom
 
гуру
20.11.16
02:30
(27) Ну думал про нечто вроде банального прямого проецирования памяти хранения объектов на диск.
И тогда да никаких вычислений места хранения, сразу объект читается откуда нуна очень шустро.
31 Torquader
 
20.11.16
02:31
Зато, никто не запретит иметь сколь угодно вложенные табличные части.
32 Garykom
 
гуру
20.11.16
02:32
(29) Реструктуризация ))
По сути если объект слишком большой то пишем его целиком в новое пустое место побольше (куда влезает с запасом), а старое помечаем как свободное.

Блин TRIM на SSD...
33 Garykom
 
гуру
20.11.16
02:33
(31) Вот это огромный плюс, но каким образом запросы к этим сколь угодно?
34 Torquader
 
20.11.16
02:33
Ещё, очень прикольная вещь - TRANSMUTE когда один объект преобразуется в другой, чего в таблицах сделать не так уж и просто.
35 Garykom
 
гуру
20.11.16
02:34
(33)+ Хотя вложенная ТЧ это же просто "объекты  -строки ТЧ" и "объекты - связи"
36 Garykom
 
гуру
20.11.16
02:35
37 Torquader
 
20.11.16
02:35
(33) В SQL и сейчас можно сколь угодно вложенные таблицы сделать. но в них будет составное ключевое поле или связь через идентификатора-посредника.
38 Torquader
 
20.11.16
02:37
(36) JsOn тоже не очень хорош - он не позволяет описывать графы.
А любая база данных - это граф.
Приходится вводить идентификаторы (как это сделано в SQL) и писать отдельные массивы (таблицы).
39 Garykom
 
гуру
20.11.16
02:37
(37) Ага и хранится это будет в отдельной табличке, которая со временем вырастет до таких размеров что пипец.

А если на нее индекс сделать то размер этой таблички (с индексом) влегкую превысит все остальные данные
40 Garykom
 
гуру
20.11.16
02:38
(38) В реляционных БД без идентификаторов "id" тоже не выйдет граф описать
41 Torquader
 
20.11.16
02:38
(39) Сейчас, если ты отбираешь документы, в которых упоминается товар, находящийся в папке с определённым свойством, то ты просто строишь такую структуру в памяти.
42 Torquader
 
20.11.16
02:40
(40) Без id вообще не выйдет описать граф - просто в памяти вместо id идёт место размещения объекта - то есть его адрес.
В pdf-файле можно так ссылаться на объекты, в нём записанные.
43 Garykom
 
гуру
20.11.16
02:40
(41) Логично
44 Torquader
 
20.11.16
02:43
(41)+ и как решается данная задача быстро - мы сначала отбираем товары с этим свойством во временную таблицу или массив, а потом ищем эти товары в документе.
То есть прошлись итератором по товарам - получили результат, который стал итератором для документов.

Просто, если много товаров и мало документов, то проще из документа смотреть в товар, а если мало товаров - то сначала отобрать товары и просеивать документы.

А можно сразу - смотреть по документу и проверять товары, отбирая уже проверенные в массив со значениями да или нет.
45 Garykom
 
гуру
20.11.16
02:45
Короче ждем квантовые компы с квантовыми БД и применяем https://ru.wikipedia.org/wiki/Алгоритм_Гровера ))
46 Torquader
 
20.11.16
02:49
Потом ещё можно вспомнить про тени, представления и отражения, когда один объект для пользователя оказывается другим - и станет вообще очень интересно.
47 Garykom
 
гуру
20.11.16
02:56
(46) Отражения это "изменяемые представления"? А тени это что?
48 Torquader
 
20.11.16
02:56
Кстати, в 1С есть некоторый аналог объектного подхода - когда мы через точку получаем значения полей объекта - система переносит нас из одного объекта в другой, причём объекты кешируются, чтобы каждый раз в базу не лазить.
И неких аналог "отражения" тоже есть - ПредставлениеОбъекта.

И просто объект с произвольными полями есть - Структура. А если вспомнить "Соответствие", то это ещё более интересная вещь, где поля могут быть объектами.

Ну а TRANSMUTE мы используем, когда с помощью конвертации данных переносим их из одной базы в другую. Ничего не мешает эти правила использовать в одной базе.
49 Torquader
 
20.11.16
03:01
(47) Тени - это как раз и есть "замещение", когда вместо реального объекта пользователю показывается другой - в 1С показываться может только НЕОПРЕДЕЛЕНО или NULL если на что-то прав нет.
Просто, например, все любят, чтобы менеджеры не видели чужих контрагентов, но вопрос, когда менеджер ищет по ИНН и не находит, никто не решает - а так - он будет видеть о контрагенте только то, что допустимо - то есть, например ИНН, чтобы не создавать дубль с тем же ИНН для себя, а использовать общий объект для своих нужд, просто меняя тень.
Соответственно, если поля задаются как и у основного объекта - они будут просто "просветляться", а если нет, то использоваться замещение.
Опять же - тень очень полезна, когда хочется посмотреть, как будет, если мы что-то поменяем - вместо изменения объекта - делаем тень и меняем всё, что хотим.
Другими словами - тень - это отложенная транзакция изменений.
50 Torquader
 
20.11.16
03:04
Опять же, механизмы двойных ссылок, чтобы в документах, создаваемых на основании друг друга записывался, скажем, не сам товар, а ссылка на основной документ с данными товара.
Тогда, если мы правим ошибку, то мы можем исправить только все документы сразу, а не по частям и вникая, что и куда пошло.
51 Garykom
 
гуру
20.11.16
03:04
(48) Да была у меня идея наваять КД для обычных реляционных БД, но потом понял что это будет простой конструктор запросов выбирающий данные из одной баз и insert|update в другую.

(49) Ага понял, когда вместо реального объекта показывается его "тень" - типа объект есть (видим что он есть и все, но использовать не можем)
52 Torquader
 
20.11.16
03:06
(51) Тень ещё позволяет к основному объекту довесить свойства, которые основному объекту не нужны, а пользователю очень хочется - чтобы в комментарий не писать текстом.
53 Garykom
 
гуру
20.11.16
03:09
(52) Гы если грохнуть справочник то можно оставить его "тень" в виде доп.реквизитов.
54 Torquader
 
20.11.16
03:09
Ладно - надо идти спать - а то мечтать о чём-то несбыточном можно очень и очень долго.

Просто отношение "тот, который" или ссылка на поле объекта очень бы спасла кучу народа от ошибок учёта.
55 Torquader
 
20.11.16
03:10
(53) Ты его просто так не грохнешь - у тебя отвяжутся связи, но, там где они упоминаются - они останутся.
Чтобы объект умер, нужно, чтобы на него никто не ссылался - тогда он уничтожается автоматически.
56 Torquader
 
20.11.16
03:12
Просто, был элемент справочника со всеми данными - и он был в выборе и искался по штрих-коду - удалили его из списка - всё он перестал отображаться в списке и перестал искаться по штрих-коду, но в документе, где он был - он остался.
И волки сыты и овцы целы - а не как сейчас - битая ссылка или гора мусора в списке.
57 Torquader
 
20.11.16
03:14
Всё - я спать. И пусть мне присниться другой мир, где все базы данных объекто-ориентированные.
58 Serginio1
 
20.11.16
11:22
59 Torquader
 
20.11.16
12:04
И, самый главный кошмар объектно-ориентированной среды, про который мы вчера забыли - это сборка мусора.
Собственно, этот "большой минус" перечёркивает все остальные плюсы реализации.
60 Asmody
 
20.11.16
13:06
Вы изобретаете nosql.
Посмотрите как делаются запросы в той же монге.
61 Torquader
 
20.11.16
13:15
(60) Ну, после размышлений о (59) уже ничего изобретать не хочется.
Просто, mongoDB хранит объекты независимыми. А для удобства использования хотелось бы описания типов полей вынести в отдельное место, чтобы в каждый объект название поля и тип не писать.
Также - длинные строки проще сразу бить на слова, чтобы полнотекстовый поиск работал - да и места они занимать будут меньше, если вместо слов будут ссылки на них.
И индексы - нужны индексы, иначе всё это объектное чудо будет сравнимо только с улиткой или черепахой.
62 Torquader
 
20.11.16
13:45
И вообще - объекто-ориентированная СУБД - это вот:
http://citforum.ru/seminars/cbd2001/day_2_1_jasmin.shtml

Вообще, как бы, они написали ещё тогда более производительный аналог 1С.
63 vde69
 
20.11.16
13:59
что бы критиковать реляционные субд стоит для начала кратенько описать "нормализованные формы" и напротив каждого правила написать его плюсы и минусы и только после этого будет понятно чего именно тебе не хватает....
64 Torquader
 
20.11.16
14:04
(63) Тут ещё есть такой момент, что объекто-ориентированная СУБД тоже может быть реляционной, то есть к ней могут применяться те же самые запросы SQL.
Если у нас построен индекс по каким-то полям объектов, то для поиска не столь уж и важно, как эти объекты хранятся - мы будем читать с диска  только те, которые упомянуты в индексе.
А устройство индекса, по большому счёту, от того, как реально хранятся данные - не сильно меняется - в любом случае - получается дерево.
65 vde69
 
20.11.16
14:25
(64) да это не важно, важно сначала понять
1. чего не устраивает в текущей теории и реализации
2. чего реально хочется изменить
3. и чем придётся пожертвовать ради этих изменений

после ответа на эти 3 вопроса желание городить велосипед пропадет....

автор только частично затронул фантик от первого вопроса....
66 Кирпич
 
20.11.16
14:29
автора JSON уже год не отпускает. не знает, бедолага, куда его приткнуть.
67 Кирпич
 
20.11.16
14:30
а аптека всё стоит
68 Torquader
 
20.11.16
14:37
(65) Ну, в сравнении с реализаций 1С мы получим хранение объекта в одном месте и считывание и запись быстрее.
Потеряется возможность сканирования отдельно табличных частей, если на них не установлен индекс, но, с другой стороны индекс по вхождению товара, скажем, в табличную часть документа позволит вообще обойтись без необходимости сканирования отдельной таблицы.
69 Garykom
 
гуру
20.11.16
15:34
(68) С регистрами только все плохо, особенно накопления.
70 Torquader
 
20.11.16
16:58
(69) Там вообще со всем всё плохо.
В текущей системе - хранение (СУБД) отделена от алгоритма (сервер 1С). Если делать работу с объектами, то отделение просто не получается - а это - реализация СУБД практически с ноля.
Как раз регистры-то ещё можно сделать, если разрешить у объектов иметь методы - тогда он вызывает метод "информация для обновления" и блоки накопления метятся как не посчитанные - когда они кому-то понадобятся, будет выполнен пересчёт - если сохраняется ещё и старое значение - то всё будет быстро и хорошо.
71 Garykom
 
гуру
20.11.16
17:40
(70) Ну если уж фирма 1С не осилила свою NoSQL базу данных написать :(
72 Torquader
 
20.11.16
17:47
(71) Вопрос не в "не осилила", а в параллельности работы.
SQL-сервер позволяет выполнять обновление данных несколькими сеансами одновременно - там для этого специальные механизмы блокировок и транзакций придуманы.
Никто не захотел всё это переписывать с нуля.
Тем более, что в 1С в базе хранятся только объекты определённых заранее заданных типов.
73 Serginio1
 
20.11.16
17:48
(65) У NoSQL  это прежде всего БД в памяти, но и у SQL тоже есть Таблицы, оптимизированные для памяти
https://msdn.microsoft.com/ru-ru/library/dn133165.aspx

NoSQL обычно применяют для кэширования данных.
Есть Данные JSON
https://msdn.microsoft.com/ru-ru/library/dn921897.aspx

А, что есть в MS SQL 2016 в том числе и для Linux еще не смотрел, но EF это поддерживает
74 Garykom
 
гуру
20.11.16
17:54
(72) Так в итоге один фиг пришлось свою "параллельность" с управляемыми блокировками изобретать.
По сути пошли по более простому традиционному пути, вместо изобретения лисапедов своих. Даже от тех что были зачатки в 77 отказались.
75 Torquader
 
20.11.16
17:54
(73) Как бы, в SQL-базах объекты обычно хранятся как JsOn или т.п. в BLOB-поле.
76 Serginio1
 
20.11.16
17:58
(75) Смысл в том, что доступ к полям как к Json по аналогии с XML на стороне SQL.

Кроме того можно получать данные в формате XML
https://msdn.microsoft.com/ru-ru/library/ms178107.aspx

Что удобно для HTTP сервисов
77 Torquader
 
20.11.16
17:58
Потом, работа с JsOn данными - это только полное сканирование.
При малых объёмах достаточно удобно, чтобы думать, что у тебя SQL, а при больших - будет всё равно что таблица без индекса.
Если строк в таблице меньше 1000, то как бы она не хранилась, никто торможения не заметит.
78 Torquader
 
20.11.16
18:03
(76) Ну это просто прикручивание к SQL-серверу возможности форматированного вывода данных запроса. Позволяет данные напрямую клиенту отсылать без какого-либо преобразования.
79 Garykom
 
гуру
20.11.16
18:04
Есть подозрение что скоро все популярные движки БД де факто станут "гибридными" SQL+NoSQL в одной коробке.
80 Serginio1
 
20.11.16
18:05
При этом есть и For JSON
https://msdn.microsoft.com/ru-ru/library/dn921882.aspx

(77) Если тебе нужно удобно выдернуть данные из JSON или XML то индексы не нужны.

(79) Так оно и есть.
81 Torquader
 
20.11.16
18:07
(80) Это когда у тебя с клиента данные пришли в JsOn - понятно, что их выдёргивать нужно и другого пути, кроме полного сканирования нет - ведь в отправленных данных не может быть передано то, что не нужно.
82 Garykom
 
гуру
20.11.16
18:26
Гм насколько на данный момент скорость (чтения/записи произвольной) оперативной памяти DDR3|DDR4 быстрее чем SSD?

Просто если вспомнить "Архитектуру фон Неймана" то память 2 разных видов (оперативная и постоянная) не нужна совершенно.
В результате если БД реализована только для одного "вида памяти" не лучше ли будет именно объектная база данных?

В которой индексы это по сути абсолютно такие же стандартные объекты базы?
83 Torquader
 
20.11.16
18:31
Индекс - это упорядоченный набор пар Ключ=>Значение, где значение - это указатель на основной объект.
84 Garykom
 
гуру
20.11.16
18:32
(83) Дык про что и речь, просто пишем адреса в памяти (общей) и все.
85 Torquader
 
20.11.16
18:34
(84) Реально - и в SQL-базе в индексы пишутся ссылки на страницы (считай адреса в памяти) где живут сами строки (считай объекты).
86 Torquader
 
20.11.16
18:35
Просто, реально SQL-предполагает, что можно изменить только одно поле объекта, тогда как в случае хранения объекта в общем виде - изменение поля может приводить к изменению его размера и выходу за пределы блока памяти, отведённого под объект.
87 Garykom
 
гуру
20.11.16
18:44
(86) Используем особенность работы SSD на перезапись, где по сути всегда происходит чтение и запись в другие блоки при этом.

Итого нужно NoSQL БД делать аппаратную на железе внутри контроллера SSD :)
88 Torquader
 
20.11.16
18:46
(87) Она там итак уже есть - просто ключ - это номер блока, а значение - данные.
Понятно, что писать каждый раз объект нужно заново, и лучше в другое место, чтобы оставалась старая версия - тогда можно делать что-то типа изоляции транзакций, когда разные транзакции видят разные данные.
89 Garykom
 
гуру
20.11.16
19:27
90 Serginio1
 
20.11.16
19:30
(81) Еще раз, JSON данные обрабатываются на сервере, аналогично как из поля выделяются данные.
91 Garykom
 
гуру
20.11.16
19:32
(89)+ По сути как только требуется распределенное хранение данных (на разных серверах/кластерах) то обычные реляционные базы кончаются в муках.
92 Serginio1
 
20.11.16
19:32
А что касается поиска (отбору), по JSON данным, то это другая песня.
93 Serginio1
 
20.11.16
19:33
(91) Ничего не кончается. Смотри 73
94 vvp91
 
20.11.16
19:34
> (0) SQL подобный язык для объектов не нужен, нужно нечто другое которое позволит выполнять аналогичную задачу
Да не дай бог жить в "это время прекрасное". Разные "современные" безумные ORM-конструкции или тот же семерошный синтаксис дохнут как мухи.
А скуль живее всех живых. И это прекрасно, потому что скуль корректно отражает операции над множествами (реляции / отношения).

Это все от ниасилятора математики, множеств, функций, отношений.

> (0) Ибо сложные вложенные составные/вложенные запросы на "языке запросов 1С" когда они много строчек разбирать без конструктора нереально сложно.
Любой биоразложимый код разбирать нереально сложно. В любом языке программирования.

> (0) Тут же более наглядно будет видна вложенность и последовательность выполнения операций.
Говн0код можно написать на любом языке. От писателя и окружения зависит, будет ли видна "вложенность и последовательность".

Гораздо лучше вкладываться в обучение людей правильным структурам данных, алгоритмам, математике, кодированию и управлению сложностью систем.

Новый ОЫЩТ-подобный язык / синтаксис никого не спасет.
95 Garykom
 
гуру
20.11.16
19:36
(93) Можно пример не отказоустойчивого кластера любого SQL сервера а ускоряющего быстродействие одной базы?
96 Garykom
 
гуру
20.11.16
19:39
(94) Т.е. прекрасно понимаем что раз для нынешнего "программиста 1С" де факто требуется изучить как минимум 2 различных языка программирования: "язык 1С" и "язык запросов 1С".

Но когда не хватает мозгов получается изучают только один (язык запросов) и в результате ныне есть такие успешные "программисты 1С" которые даже сортировку ТЗ через запрос делают...

Мое же предложение оставить обязательным только 1 язык, а "запросы" будут простым продолжением этого языка.
97 Garykom
 
гуру
20.11.16
19:41
(96)+ Причем отказа от "языка запросов 1С" не будет, просто они будут автоматически формироваться как в конструкторе "из кода".
98 Torquader
 
20.11.16
19:42
(95) Просто, если нужно распределёно хранить данные, то можно сделать несколько SQL-серверов, между которыми делить данные по какому-то принципу.
Далее, мы можем параллельно запустить выборку на всех серверах и получить общий результат - ведь будет же работать - конечно, и быстрее, чем один SQL-сервер.

А вот когда мы захотим сделать соединение таких таблиц, то тут наступит проблема - так как всех таблиц ни один SQL-сервер не знает - то есть - соединение будет невозможно - вот тут уже замечательные возможности SQL и кончаются.
99 Garykom
 
гуру
20.11.16
19:45
(97)+ Нечто похожее как написал код:

СправочникВыборка = Справочники.Номенклатура.Выбрать();
Пока Выборка.Следующий() Цикл
КонецЦикла;

И получили автоматически текст запроса:
"ВЫБРАТЬ Ссылка ИЗ Справочник.Номенклатура"

А можно наоборот имея "текст запроса", получить "код на языке".
100 Garykom
 
гуру
20.11.16
19:47
(98) Когда несколько серверов как быть со связями между таблицами?
Не спорю что можно делать разные базы но это совсем уже не торт.
101 Torquader
 
20.11.16
19:47
(99) Ничего мы не получили - там же ещё все поля заполняются и блокировка ставится.
102 Torquader
 
20.11.16
19:48
(100) Связь-то я могу написать, что такая-то таблица с такой-то связана, но когда данные этой таблицы на другом сервере, то их получение займёт много времени.
Конечно, вариант - согнать всё на координатор и выполнить там, но тогда у нас координатор будет SQL-сервером, а все остальные - распределённое хранилище данных.
103 Garykom
 
гуру
20.11.16
19:54
(102) Ага но вот в случае ООБД легко получается распределение, исключая случаи "сложных запросов" когда выборка на одном сервере зависит от данных на другом лежащих.
Но такие случае легко преобразуются в последовательность "простых запросов".
104 vde69
 
20.11.16
20:00
(78) ну как-бы для этого ХП существуют...


закрой физ таблицы хранимками и будет тебе то что ты хочешь...
105 Garykom
 
гуру
20.11.16
20:03
(104) Дополнительная прослойка в виде хранимок = тормоза. Подразумевал то разные движки в одном флаконе, когда одну табличку можно сделать реляционной а еще тут же есть объектное хранилище и запросы между ними прозрачные.
106 Serginio1
 
20.11.16
20:06
(100) Все зависит ль данных.

MS кстати развивает доступ к NoSQL. О выборе можно почитать здесь
https://docs.microsoft.com/en-us/azure/documentdb/documentdb-nosql-vs-sql
107 Garykom
 
гуру
20.11.16
20:12
(106) Угу и там что можно сразу прочитать про Scaling?
108 Serginio1
 
20.11.16
20:54
Ну DocumentDB это то, что ты хотел
https://azure.microsoft.com/ru-ru/services/documentdb/

Преимущества моделей SQL и JavaScript без схем
Создавайте запросы к документам и массивам данных в формате "ключ — значение" с помощью уже знакомого синтаксиса SQL и JavaScript, не прибегая к использованию схем или вторичных индексов. В базе данных DocumentDB не используются схемы. Кроме того, она может автоматически индексировать документы в формате JSON. Определяйте бизнес-логику как хранимые процедуры, триггеры и пользовательские функции полностью на языке JavaScript и выполняйте их непосредственно в ядре СУБД.
109 Кирпич
 
20.11.16
22:47
(108) это просто MongoDB, но для вас это новейшая супер-технология от Microsoft.
110 Serginio1
 
20.11.16
23:09
(109) Ты бы хоть проверил, прежде чем ...
https://www.simple-talk.com/cloud/cloud-data/mongodb-vs-azure-documentdb/
111 Кирпич
 
20.11.16
23:23
(110) и что там написано? что совместимо с MongoDB на 100%, но не MongoDB? :)
112 Torquader
 
21.11.16
00:26
Как бы, в SQL все бояться FullScan, вводя для этого индексы, на которые тоже тратится и время и ресурсы, и иногда получается, что накладные расходы гораздо больше.
А когда мы не боимся FullScan, мы можем одним сканированием выполнить сразу все запросы, которые накапливались до момента завершения прошлого сканирования, что на самом деле даёт очень существенный прирост скорости. А если у нас есть индексы, то параллелить таким образом можно только запросы с одинаковыми условиями - а они не часто встречаются.
113 Serginio1
 
21.11.16
12:43
(111) Ты читал? То, что есть куча отличий для тебя это 100%. Для тебя все NoSQL и реляционные базы данных одинаковы.
Нет различий между MongoDB  и DocumentDB
или
Oracle и MySQL
114 Кирпич
 
21.11.16
12:48
(113) NoSQL, JSON, Java, Document. Принцип тот же. Да еще и протокол обмена одинаковый. Одна фигня. Что у них там внутри меня не интересует.
115 Кирпич
 
21.11.16
12:49
+(114) да и внутри половину кода скопипастили из MongoDB стопудово
116 Serginio1
 
21.11.16
20:12
(114)

By contrast, MongoDB does not have a native REST interface. It can be a little confusing because while there is no native support, there are third party open source wrappers written in other languages (Node, Python, but sadly no .NET).

For the most part, just your typical JSON data fragment. One thing to look for is the _self property; this field is ubiquitous (and unique) to all documents in DocumentDB. The purpose of _self is to act as an immutable primary key field. Searching on _self is the fastest way to retrieve a resource.
MongoDB uses BSON which is a proprietary extension (or superset) of JSON. While there is no official standard, a specification can be found online. The primary takeaway is that BSON has support for data types beyond the standard JSON types as shown below:


И еще и еще.

  Все в патентах. Но там не так много что то интересного. Им нужна своя база NoSQL для Azure. И мне если честно наплевать MongoDB или DocumentDB . Суть в том, что написано в 108. То, что хотел TC.
117 Кирпич
 
21.11.16
20:36
(116) "То, что хотел TC."
да нихрена он не хотел. тро-ло-ло он хотел.
118 Serginio1
 
21.11.16
21:05
(117) Вот в этом с тобой согласен
119 Torquader
 
21.11.16
21:26
(116) Ну, REST - это совершенно другое дело.
Изначально, говорилось, что всё будет JsOn, но, потом выясняется, что это не очень удобно - и опять притягивают xml, и прочее.
Опять же, в javascript количество типов очень сильно ограничено, так что без расширения ничего не получится.
В xml, по сути - вообще - одни строки, и те же грабли с типами. Для чего они пространства имён изобретали и прочие вещи.

Автор, же, насколько я понимаю, хотел, чтобы запросы к базе писались на JsOn, а не данные хранились.
120 Живой Ископаемый
 
21.11.16
22:23
Как в Постгрессе, например.. Или Фаербэйсе (фреймворке)
Например в постгресе есть таблица с полем "details", в котором предположим в одной строке вот такое строковое значение (на самом значение это поле типа jsonb)
{"code": "cf7b5b1d-3de9-11e2-b0da-001e68576f68", "name": "Имя", "uuid": "20161013-DE4A-40DA-808C-9F6BD4EAA32F", "address": "какойто адресс ", "closeDate":"19.09.2016 16:59:12"}
Так вот в Постгрессе вполне возможен запрос такого вида


SELECT details->>'closeDate'
  FROM mytables
  WHERE code = 'cf7b5b1d-3de9-11e2-b0da-001e68576f68'
  order by details->>'closeDate' desc
  limit 1;

на поле closeDate также можно налагать условие.


А 1Совский конструктор запросов так не может, хотя мы можем добавить таблицу Постгресса во внешние источники данных.
А было бы здорово, если бы умел.
121 Garykom
 
гуру
21.11.16
22:45
(117) (118) Из этого "тро-ло-ло" узнал и вывел много нового, а вы?
122 Garykom
 
гуру
22.11.16
00:16
К примеру нашел такую штуку как http://www.kinetica.com/ в развитие Ускорение СУБД с помощью GPU и CUDA
123 DailyLookingOnA Sunse
 
22.11.16
07:13
Физически данные всё равно будут выбираться из линейно адресованного хранилища памяти.
Поэтому (_=_), сколько надстроек над этим придумано. Всё это ухищрения.
124 Кирпич
 
22.11.16
09:15
(121) Из этого "тро-ло-ло" узнал и вывел много нового, а вы?
Абсолютно ничего. В ветке, кроме мистабольства, ничего не было.

(122) Глупости всё это. Баловство и замусоривание мозга. Всё решает скорость дисков и объём памяти. А все алгоритмы придуманы лет 30 назад. Остальное - вариации на тему.
125 Garykom
 
гуру
22.11.16
10:50
(124) Хочешь сказать что на разных дисках (HDD/SSD) будут замечательно работать одинаковые алгоритмы?
Нюню, если для HDD требуется "дефрагментация индексов" то для SSD индекс нуна банально на отдельные диски от данных.
126 Serginio1
 
22.11.16
12:20
127 Garykom
 
гуру
22.11.16
12:44
(126) Так не утверждал что на HDD нельзя разносить для скорости на разные. Смысл что на SSD дефрагментация бесполезна и даже вредна.
128 Кирпич
 
22.11.16
12:44
(125) "Хочешь сказать что на разных дисках (HDD/SSD) будут замечательно работать одинаковые алгоритмы?"
Я хочу сказать, что нет смысла обсуждать коней в вакууме.
129 Garykom
 
гуру
22.11.16
12:46
Кстати интересная нынче картинка что дорогущие RAID контроллеры идут в топку с SSD.
Лучше взять несколько отдельных SSD шустрых и на разные контроллеры дешевые их и правильно разнести систему, данные базы и индексы базы.
130 Garykom
 
гуру
22.11.16
12:48
(128) Пытался оспорить только "А все алгоритмы придуманы лет 30 назад. Остальное - вариации на тему."

И гипотетические 30 летней давности алгоритмы в вакууме это похлеще коней.
131 Кирпич
 
22.11.16
13:03
(130) Чо, деревья, хеширование и методы сжатия очень часто придумывают?
132 Garykom
 
гуру
22.11.16
13:23
(131) Ну математика (а терь уже и теоретическая информатика) такая штука, которая заранее изобретает кучу бесполезных пока штук.

Но неожиданно можно найти новое применение старым алгоритмам.
К примеру всем ведь понятно что без криоохлаждения максимальная частота работы обычной электроники это ~4 ГГц.
Итого вместо вертикального роста вверх, будет в ближайшее время конкретный такой горизонтальный рост вширь. Когда в обычной рабочей станции дофига ядерный проц, с дофига канальной памятью и с кучей накопителей.
И будет полное переписывание софта под параллельность, а обычные RDBMS нифига не параллелятся к сожалению ((
133 Serginio1
 
22.11.16
13:25
(129) От того, что ты разнесешь индексы это ничего не изменит. Внутри алгоритма B++ дерева так или иначе идет балансировка. http://rsdn.org/article/alg/tlsd.xml

А учитывая кластерные индексы будет куча перезаписей.
Вот скорее индексы лучше переносить на HDD
134 Garykom
 
гуру
22.11.16
13:33
(133) обычные ин-мемори бд с резервным питанием и gpubd ближайшее будущее где нужна скорость а объемы баз не сильно большие
135 Garykom
 
гуру
22.11.16
13:36
(134) *gpudb

+ А нынешние оптимизированные для HDD базы (где используют оперативку как кэш) для этого не фонтан, нуна их оптимизировать на исключение "лишних" операций кэширования
136 Serginio1
 
22.11.16
14:35
(134) Я тебе уже писал про SQL тоже есть Таблицы, оптимизированные для памяти
https://msdn.microsoft.com/ru-ru/library/dn133165.aspx