Имя: Пароль:
IT
 
Реализация РН на NoSQL c MapReduce
0 Garykom
 
гуру
16.06.17
11:27
Пытаюсь на NoSQL базе данных (CouchDB) сделать аналог 1С-ных Регистров накопления (остатки и обороты).

К примеру банальная задача остатков товаров на складах и документов движения (приход/расход).

Если сделать остатки через reduce-функцию то проблема что при добавлении/изменении документа движения будет происходить полный пересчет по всем документам.

В 1С это решали например хранением промежуточных итогов на начало каждого месяца и на лету считаем документы с начала нужного месяца чтобы получить итог на требуемую дату.

Вот как бы красиво извратиться на CoudhDB?
Причем чтобы не потерять возможность распараллеливания (и ускорения) вычислений остатков на нодах кластера?
1 Asmody
 
16.06.17
11:31
(0) Ну и сделай еще одну коллекцию (или как там оно называется) с промежуточными остатками
2 Asmody
 
16.06.17
11:33
В записях придумай признак актуальности. При записи движений "задним числом" сбрасывай признак, и каким-нибудь регламентом пересчитывай.
3 Garykom
 
гуру
16.06.17
11:34
(1) Ага, т.е. на каждый месяц создаем свою коллекцию а все последующие используют только одну предыдущую.

Т.е. поменяли в прошлом месяце документ, пересчитается только текущий месяц начало а прошлые не трогаются так?
4 Garykom
 
гуру
16.06.17
11:34
(2) Там фишка что ничего придумывать не надо все встроено эти признаки ))
5 Asmody
 
16.06.17
11:35
Операция filter там есть?
6 Garykom
 
гуру
16.06.17
11:38
(5) Есть map-функции которые пересчитываются только для измененных доков, это и есть некий фильтр для reduce.

Они выдают готовую выборку, каждый документ превращается в 0 или несколько "записей" в этой "выборке".
7 Garykom
 
гуру
16.06.17
11:38
(6)* 0, 1 или несколько
8 Asmody
 
16.06.17
11:40
(6) Это как? По идеологии, map работает со всей коллекцией.
9 Garykom
 
гуру
16.06.17
11:42
(8) Он работает по отдельности с каждым элементом и считается только для тех которые изменили ))
10 Garykom
 
гуру
16.06.17
11:44
(9)+ Фишка в офигенной распареллеливании операции filter из коробки, на RDBMS один "select" фига с два так распараллелишь
11 Garykom
 
гуру
16.06.17
11:45
(10)+ Недостаток оно место на диске жрет как не в себе и удаление данных не помогает почти
12 Fragster
 
гуру
16.06.17
11:45
(10) nosql придуман совсем не для @filter@ и работает оно про определению хуже реляционных колоночных БД
13 Fragster
 
гуру
16.06.17
11:47
а костыли с отдельными объектами-фильтрами, хранящими в себе ключи объектов, удовлетворяющих фильтрам - это намного хуже, чем индексы
14 Garykom
 
гуру
16.06.17
11:47
(12) Не хуже/лучше, а просто "по другому".
Смотри вот у тебя есть 10 компов, попробуй используя их ускорить работу одной базы обычной реляционной БД?
15 Лефмихалыч
 
16.06.17
11:47
(0) это как мартышке хобот пришить. Оно придумано не для этих задач
16 Fragster
 
гуру
16.06.17
11:47
(14) в какой конкретно задаче?
17 Лефмихалыч
 
16.06.17
11:48
(14) твоему велосипеду понадобятся эти самые 10 компов, чтобы только обеспечить сравнимую с реляцинной БД производительность...
18 Garykom
 
гуру
16.06.17
11:48
(16) В задаче @filter@ - обычный select с условием
19 Fragster
 
гуру
16.06.17
11:49
можно сделать кластеризацию таблиц по хеш-ключам какого-нибудь индекса основного или зеркалирование и распараллеливание на этапе запроса.
20 Garykom
 
гуру
16.06.17
11:49
(17) Для одного юзера да, но особенность что даже 1000 юзеров будет работать так же как 1 на этих 10 компах-серврах ))
21 Garykom
 
гуру
16.06.17
11:50
(19) Очень смешно, тут ничего специально делать на CouchDB не надо, как для одной ноды так и для кластера один код функций mapreduce
22 Лефмихалыч
 
16.06.17
11:50
(20) ну, пока это просто слова.
Кроме того, в результате этой твоей деятельности получится эдакая машина руба голдберга, которую упорешься майнтейнить, мне кажется.
23 Fragster
 
гуру
16.06.17
11:51
(18) вот именно, что nosql придуман для хранения неструктурированной информации, и отдельные признаки "структур" хранятся также - ключ - значение фильтра, значение - список ключей. из-за этого очень много накладных расходов именно на такое использование.
и если денормализация при увеличении нагрузки в реляционных БД делается очень просто, то материализрованные фильтры "mongo работают очень быстро, пока файл данных не превышает оперативныую память" - это очень смешно...
24 Garykom
 
гуру
16.06.17
11:51
(22) Подумай как вк и прочие фэйсбуки считают лайки?
25 Garykom
 
гуру
16.06.17
11:52
(23) У rdbms проблема что добавление памяти не сильно помогает, упираемся в cpu.
Тут же легкость заюзать нужное кол-во cpu как и сколько угодно памяти.
26 Fragster
 
гуру
16.06.17
11:53
(21) ну, если СУБД изначально разрабатывалась для кластеров - то ничего делать и не надо. если нет - то надо. если реализация кластера коучдб скрыта от тебя, то это не значит, что её нет. точно также оракл/мсскуль/постгре/майэскуэль можно настроить в работе в кластере, используя стратегии, подходящие для конкретных задач.
27 Лефмихалыч
 
16.06.17
11:54
(24) у них взрослые ЦОДы с взрослыми вычислительными ресурсами. Они на вот эти хороводы из десяти писюков, в едином порыве реализующих одну БД, водить не станут. Ибо это дороже и вообще - пороховая бочка.
28 Fragster
 
гуру
16.06.17
11:56
а с самого начала автору надо посмотреть, что такое map/reduce, а потом покурить, например, про materialized view в постгре
29 Garykom
 
гуру
16.06.17
11:58
(27) Речь не про "хороводы писюков", в этих "взрослые ЦОДы" никакие MSSQL|ORACLE не помогут без применения NoSQL в нужных местах.
30 Лефмихалыч
 
16.06.17
11:59
(29) ну, а вот ты задумал хреновину, с помощью которой и nosql помогать перестанет
31 Garykom
 
гуру
16.06.17
12:00
(28) Думаем что движок реляционной БД не заточенный для NoSQL, в который прикрутили "materialized view" справляется лучше чем заточенная NoSQL изначально с этими view?
32 Вафель
 
16.06.17
12:00
тут я понимаю цель не в том чтобы победить реляционные дб, а просто изучить как работает носкл
33 Fragster
 
гуру
16.06.17
12:00
(29) да, только реализация РН - это не то самое "нужное место". тебе нужно обеспечить ACID, так что используй подходящие средства
34 Garykom
 
гуру
16.06.17
12:00
(30) nosql это не просто хранилище пар ключ/значение а много больше
35 Fragster
 
гуру
16.06.17
12:01
(31) а materialized view - это не nosql, это типа таблиц итогов. nosql в задаче (0) вообще нафиг не нужен
36 Fragster
 
гуру
16.06.17
12:01
(34) да, но зачем делать из апельсина грушу?
37 Garykom
 
гуру
16.06.17
12:02
(33) ACID (точнее некий аналог) в данном представителе NoSQL есть "из коробки" в виде "ревизий документов".
38 Fragster
 
гуру
16.06.17
12:02
nosql в постгре - это скорее json колонки
39 Asmody
 
16.06.17
12:02
(31) Ну, вообще-то, для "всего такого" давным давно придумали OLAP. Который, суть, и есть хранилище заранее рассчитанных данных. И, да, пересчет кубов — это небыстрая и нечастая операция.
40 Fragster
 
гуру
16.06.17
12:02
(37) ну давай, реализуй мне контроль остатков для двух параллельно работающих пользователей.
41 Вафель
 
16.06.17
12:02
Для простого хранения пар ключ / значение есть более специализированные инструменты
42 Garykom
 
гуру
16.06.17
12:02
(35) (36) ОК не получится груша, вернусь к апельсинам или даже яблокам ))
43 Лефмихалыч
 
16.06.17
12:03
ну, да, - каким-то таким же образом придумали анальный секс
44 Garykom
 
гуру
16.06.17
12:03
(40) А вот это был следующий вопрос )) Уже тоже подумал что прикольно получается
45 Fragster
 
гуру
16.06.17
12:03
(44) стоя, в гамаке и под ёжин сбажин?
46 Garykom
 
гуру
16.06.17
12:04
(44)+ Когда проводим документу - а реальные остатки видим по отчетам только через некоторое время.

Но есть в помощь что видно что остатки сча не совсем актуальные и еще считаются!!
47 Fragster
 
гуру
16.06.17
12:04
(46) извините, я не могу сделать для вас резерв, так как не знаю, хватит ли товара на складе...
48 Garykom
 
гуру
16.06.17
12:05
(47) гыгыгы - ага когда при прикидывании структуры вышла такая фигня ржал ))
49 Garykom
 
гуру
16.06.17
12:06
(48)+ Но учитывая что дофига торговиков работают "закрывая минуса" уже отгруженные то?
50 spock
 
16.06.17
12:08
(37) А можешь на пальцах объяснить как ACID реализован?
Я себе слабо представляю, как http-сервер (а CouchDB снаружи выглядит им, и работает через http) может выполнить insert/update + delete в два вызова, не сломав ACID?
51 Garykom
 
гуру
16.06.17
12:08
(47) Это выглядит как сначала делаем резерв и работаем дальше без тормозов.
А потом оно сообщает через некоторое время - "резерв сделать не удалось".
И пущай юзер думает дальше ))
52 Fragster
 
гуру
16.06.17
12:09
(49) молодцы. теперь давай придумаем wms, которой приходят задания на сборку с конкретных мест, но мы не знаем, сколько на конкретном месте лежит товара...
53 Garykom
 
гуру
16.06.17
12:09
(50) Документы имеют "ревизии", при считывании дока ее получаем.
При попытке сохранить документу передаем старую считанную ревизию, если мы опоздали и кто то переделал док то выйдет ошибка.
Или док сохранится и получит новую ревизию.
54 Fragster
 
гуру
16.06.17
12:10
(51) херовенький выход
55 Garykom
 
гуру
16.06.17
12:10
(53)+ "Ревизия" это просто длинный номер-число который все увеличивается при каждом сохранении/изменении.
56 Garykom
 
гуру
16.06.17
12:11
(54) Думаешь для юзеров лучше ждать сидя тоскливо перед экраном когда там документа проведется?
57 spock
 
16.06.17
12:13
(53) Не, такой сценарий из реляционной жизни:
1. Открыли транзакцию;
2. update'нули запись в одной таблице;
3. delete'нули запись из другой таблицы, если в третьей таблице select'нулось нужное и подходящее.
4. Если чего-то не select'нулось, то все откатить, иначе зафиксироваться.
58 Вафель
 
16.06.17
12:13
(53) ну собственно в 1с точно также для справочников/документов
59 Garykom
 
гуру
16.06.17
12:16
(57) Прикинь нету транзакций, совсем нету... ибо они нафиг не нужны ибо плохо поддаются кластеризации ))
60 spock
 
16.06.17
12:17
(59) А я же к этому и веду. А как тогда можно говорить про ACID?

ps: я не критикую, а присматриваюсь к этой субд.
61 Garykom
 
гуру
16.06.17
12:21
(60) ACID это термин для реляционных БД, тут немного иное.

Суть что нельзя сделать кучу изменений "оптом" в одной транзакции. Каждый документ или "запрос" (в реальности функция map или reduce для view) могут обрабатываться на своей ноде совершенно параллельно и почти не зависимо.
62 Garykom
 
гуру
16.06.17
12:23
(61)+ Тьфу точнее "запросы" как раз легко делятся на кучу узлов-нод в кластере где и параллельно выполняются
63 Вафель
 
16.06.17
12:24
(62) А транзакции то вообще есть?
64 Garykom
 
гуру
16.06.17
12:24
(62)+ Но это не запросы, это код функций на JS с входными и выходными данными.
Причем за пределы входных данных функция выйти не может, вот что есть на входе с тем и работай!
65 Garykom
 
гуру
16.06.17
12:24
(63) А зачем?
66 Fragster
 
гуру
16.06.17
12:24
(56) ну, "ждать" целых пол секунды - не так долго
67 Вафель
 
16.06.17
12:25
ну и в термине асид нет ничего про то как устроена база.
Это про то, что транзакция неделима и либо применяется вся либо нет
68 Вафель
 
16.06.17
12:25
(65) А как ты параллельность без транзакций хочешь делать?
69 Garykom
 
гуру
16.06.17
12:27
(66) Гм а кто мешает в интерфейсе подождать тогда эти полсекунды (для NoSQL пусть оно как RDBMS по скорости условно пашет) и только потом отдать управлению юзеру?
70 Fragster
 
гуру
16.06.17
12:28
(69) в том-то и дело, что не так оно по скорости пашет
71 Garykom
 
гуру
16.06.17
12:28
(68) Смотри у тебя рота выстраивается в ряд.

Транзакции это когда каждого солдатика по очереди в нужное место ставим, сначала 1, затем 2-й и т.д.

А NoSQL это они сами одновременно все идут и становятся на нужное место ))
72 Garykom
 
гуру
16.06.17
12:30
(70) Две кривые кол-во юзеров/мощность железа и когда пересекутся?
Для rdbms проблема что как железо не увеличивай один фиг пару лямов юзеров в одной базе не потянет...
73 Garykom
 
гуру
16.06.17
12:31
(71) +ну или не становятся в ряд, ибо "не шмогла" ))
74 Fragster
 
гуру
16.06.17
12:31
(71) то, что нужно сначала определить нужное место, естественно, забываем?
для лайков, тегов, комментов (да и то с ограничениями) это непринципиально, а для всего, что требует контроля - это ключевой момент.
и бизнес - это такая вещь, что без контроля - никуда. разве только касса с онлайн сканированием с помощью СШК может работать без контроля, да и то только в простейших случаях. а как только всякие маркетологи и егаисами появляются - всё, пц.
75 spock
 
16.06.17
12:31
(65) Например, для этого в одной транзакции:
1. Записать расходный документ (шапка + тч);
2. Уменьшить остатки в спец. регистре;
76 Garykom
 
гуру
16.06.17
12:32
(74) Ага то то в 1С многие начинают приходить к механизмам "отложенного проведения" в регламентных заданиях по ночам...
77 Вафель
 
16.06.17
12:32
(71) Это если у всех есть свои места. или неважно где кто стоит.
А если в нужное место нужно каждого поставить, то будет конкуренция
78 Fragster
 
гуру
16.06.17
12:32
(72) ну, пару лямов пользователей вряд ли будут собирать заказы с одного склада...
79 Вафель
 
16.06.17
12:33
(76) если контроль остатков не нужен, то можно не проводить сразу, а отложенно вообще по всем регистрам.
Тогда транзакции не нужны
80 Garykom
 
гуру
16.06.17
12:34
(75) В NoSQL все не так это разные операции без транзакции.
1. Запись расходного документа ACID
2. Уменьшение остатка - не ACID, сразу об этом можно узнать что "остатки кривые" оно в фоне считается, и когда будет готово об этом узнаем.
81 Garykom
 
гуру
16.06.17
12:34
(78) Амазон?
82 Fragster
 
гуру
16.06.17
12:34
(76) себестоимость можно и попозже посмотреть. а вот контроль остатков - нет.
83 spock
 
16.06.17
12:35
+(78)  А два менеджера на процентах с продаж дефицитного товара запросто :)
84 Fragster
 
гуру
16.06.17
12:35
(81) на одном складе? там десятки операторов и всё.
85 Garykom
 
гуру
16.06.17
12:36
(82) Да блин кто мешает контроль остатков сделать через отдельный документ?

Если уж так нуна... Будут просто такие же тормоза как и в rdbms
86 Garykom
 
гуру
16.06.17
12:36
(84) Речь про заказы и резервы товаров
87 Fragster
 
гуру
16.06.17
12:40
(86) резервы в минус не всегда позволительны
88 orefkov
 
16.06.17
12:40
(24)
Как-как - приблизительно, вот как. Лайки считать - не деньги в кассе, плюс-минус десяток всем пофиг.
Видал на ютубах, когда популярное видео выложат - просмотров 301, лайков 2000 ?
89 spock
 
16.06.17
12:40
(85) Выбор такой?
1. Супербыстро, но не точно;
2. Точно, но не супербыстро.
90 Garykom
 
гуру
16.06.17
12:41
(88) Прям описал картинку на типичном оптовом складе, а часто и розничном магазине ))
91 Garykom
 
гуру
16.06.17
12:41
(89) угу
92 orefkov
 
16.06.17
12:45
О, я хочу чтобы я когда деньги куда-то переводил, сначала там прибавляли, и только потом, когда-нибудь, проверяли, что они у меня есть :)
93 Garykom
 
гуру
16.06.17
12:47
(92) Угадай как работают VISA с прочими Мастеркард ?
94 spock
 
16.06.17
12:50
(92) :)
(93) Нет! Они так не работают.
95 Garykom
 
гуру
16.06.17
12:52
(94) Раньше только так и работали, просто есть лимиты списания сумм без проверки/резервирования их наличия.

В нынешнее время когда каналы связи намного лучше без предварительной связи с банком-эмитентом и проверки обычно нифига не дают.

Исключения старые карточки (без чипов только магнитная полоска) или старые терминалы без чипов, там еще может произойти когда списывают в минус ))
96 Garykom
 
гуру
16.06.17
12:55
(95)+ Учтите все (почти) банковские эквайринговые терминалы умеют работать в режиме "оффлайн кассы".

Т.е. обмен с банком и списания пройдет не в момент пробития чека а при связи с банком при "обмен данными".
Смотря как настроены, но так уже давно банки не настраивают, только онлайн.
Редкие исключения это зарубежные платиновые (ВИП) карты.
97 asady
 
16.06.17
12:55
(0) РН от 1С вещь спорная.
предлагаю не заморачиваться и писать изменения только текущей датой и хранить только остатки на начало текущего дня.
98 orefkov
 
16.06.17
12:58
Я вот просто не понимаю, какой же это должен быть СКЛАДИЩЕ и БАЗИЩЕ, чтобы там требовалась мощь десятка современных серверов?
В 2004 годе у меня на атлонишке гигагерцевом с одним гигом оперативы и 80гектарным винтом крутился терминальный сервер, на котором 30-40 юзеров работали на оптовом складе в семёрке. Где, на минуточку, не то что параллельности не было, а единовременно мог проводится только ОДИН документ.
А на современном железе на одом компе при правильных алгоритмах работы не знаю, до тыщи народу наверное смогут работать без тормозов, а вся база в оперативке будет сидеть.
То есть если для задачи потребно уже десять компов, то один хрен там какие-то доморощенные самописки не будет юзать.
99 Вафель
 
16.06.17
12:59
(97) А задним число изменения запретить
100 orefkov
 
16.06.17
13:01
(96)
Ты вообще не понимаешь, о чём речь.
В те времена, о которых ты говоришь, карта была вещь для элиты, и была она КРЕДИТНАЯ. Поэтому там проверка не выполнялась потому, что банк-эмитент давал гарантию, что счёт будет оплачен по-любому. Поэтому и карты банк кому попало не выдавал. А массовое распространение карт как средства обычного платежа началось именно тогда, когда появилась возможность проверять на них бабки в реальном времени.
101 Garykom
 
гуру
16.06.17
13:03
(100) Ха, любая дебетка де факто "кредитная" и иногда при редких сбоях владелец карты об этом узнает ))
102 orefkov
 
16.06.17
13:04
(99)
Кстати, забугорные системы так и работают. Все правки только через сторнирование. В ТЗ так и пишут - возможность изменить проведённый документ должна быть исключена.
103 Garykom
 
гуру
16.06.17
13:06
(102) Да убирание работы задним числом конечно слегка облегчает реализацию, но что делать с мелкими исправлениями когда 10-20 раз документ "перепровели".
104 orefkov
 
16.06.17
13:06
(101)
Не при сбоях, а при оплате за бугор, когда через пару дней могут досписать курсовую разницу. Или доначислить. Всяко у меня бывало. Но один фиг - в момент платежа проверяет, что денег хватает. Так что здесь как-раз тоже проблема работы "задним числом".
105 orefkov
 
16.06.17
13:09
(103)
У них пока документ правят, он как бы "проект документа", и остатки двигает исключительно текущие, актуальные. Даже дата бывает открытая, "скользащая". Но как только приняли и зафиксировали сделку - всё, аля-улю. Что написано пером, не вырубишь топором.
106 Garykom
 
гуру
16.06.17
13:13
(104) Нет у меня был вполне себе тут на местной заправке конкретный такой сбой.
Когда транзакция сначала прошла, потом почему то отменилась, а потом через неделю списали в минус (на карте денег столько не было).

Карта чистая дебетка, если бы не было этого сбоя с оплатой заправки в пару тыщ то пошел бы в банк разбираться ))
107 Garykom
 
гуру
16.06.17
13:14
(106)+ Еще хорошо что это их сбой был и % за пользование овердрафтом не начислили.
108 orefkov
 
16.06.17
13:15
+(104) (106)
Так бывает, и это не кредит, а овердрафт. Банк по нему может потом тебе адские проценты выкатить.
109 Garykom
 
гуру
16.06.17
13:15
(105) Т.е. делаем два вида остатков, одни постоянные и другие временные.

Временные становятся постоянными когда?
110 Garykom
 
гуру
16.06.17
13:16
(108) Эээ овердрафт это по нашим законам и есть кредит...
111 orefkov
 
16.06.17
13:16
(106)
Кстати, тоже на одной лукойловской автоматической заправке постоянно - списание, отмена и тут же снова списание. Заговор у них какой-то...
112 Garykom
 
гуру
16.06.17
13:18
(110)+ "1. В случаях, когда в соответствии с договором банковского счета банк осуществляет платежи со счета несмотря на отсутствие денежных средств (кредитование счета), банк считается предоставившим клиенту кредит на соответствующую сумму со дня осуществления такого платежа."
http://www.consultant.ru/document/Cons_doc_LAW_9027/cd4e8de1e04a7d8f27dd2d94f981bf2031494d0b/
113 Garykom
 
гуру
16.06.17
13:18
(111) Хм тоже на Лукойле было - точно заговор ))
114 asady
 
16.06.17
13:19
(105)+1
док при проведении остатки на начало дня не двигает никак.
хоть сколько раз перепроводи

а вот при закрытии дня - остатки посчитали и тогда уже всё- день закрыт - работа задним числом запрещена.
115 orefkov
 
16.06.17
13:22
(109)
Какой смысл делать разные типы остатков, если задним числом документы не меняются? Они всегда одни, текущие.
116 Garykom
 
гуру
16.06.17
13:25
(115) Не разные а отдельные, постоянные остатки вместе хранятся и это вьюха, временные за текущий период, которые еще не перешли в постоянные отдельная вьюха.

Полные текущие остатки это постоянные + временная дельта
117 orefkov
 
16.06.17
13:30
(116)
Что ты имеешь ввиду под "постоянные остатки"?
Предпросчитанные промежуточные итоги по периоду что-ли?
В системах, где работа задним числом исключена - остатки - это просто таблица, в которой записано текущее значение остатка. Там даже поле "период" не нужно. Товар, склад, количество, грубо говоря. Документ провели - запись в таблице изменили.
Для отчетов считают по документом, можно регламентом с нужной периодичностью предпосчитать промежуточные итоги.
Но это просто регламент, и если его не сделать - просто отчёт будет считать итог на дату дольше. Но никаких разных остатков нет.
118 Garykom
 
гуру
16.06.17
13:34
(117) В CouchDB view это не таблица (доступная пользователю на запись) а некие "итоги" доступные только на чтение.

Фактически остатки чего то или обороты это и есть такие итоги, которые зависят от записанных документов.
119 Garykom
 
гуру
16.06.17
13:36
(118)+ В смысле не хочется изобретать нечто свое с хранением остатков в документе и вручную очень медленно с этим работать.

Хотя параллельное чтение одного дока это вполне шустро, короче буду экспериментировать.
120 orefkov
 
16.06.17
13:38
(118)
А зачем это тебе, считать каждый раз всю сумму по документам?
Записывай куда-то просто пару товар - остаток.
Если по складам, то ключ будет "Товар/Склад", значение - "Остаток".
Документ провели - прочитал ключ-значение, изменил значение остатка, записал обратно.
121 orefkov
 
16.06.17
13:44
(119)
А, понял, ты хочешь чудо-средство, что "я туда только движения пишу, а оно мне вжих, волшебным образом по движениям потом итоги выдавало".
Тогда да, надо будет на десять сервером распаралеливавать, чтобы на-лету остатки считать. Вместо того, чтобы алгоритм хранения продумать, и тогда этой хваленой возможности считать параллельно просто не понадобится, ибо и считать то не надо.
122 orefkov
 
16.06.17
13:49
+(121)
Все думаете, что в NoSql какая-то магия есть. Нет там ничего, обычное хранилище ключ-значение, по-сути откат к старинной Berkley DB, в грамотной маркетинговой обёртке. Вся скорость только за счёт того, что всю базу данных в оперативку засасывает. Ну так можно и sqlite в memory затянуть - там такая скорость будет, закачаешься.
123 orefkov
 
16.06.17
13:54
+(122) *Berkeley DB*
124 Garykom
 
гуру
16.06.17
14:04
(121) (122) Чудо-средство это обычная видяха с GPU ))

Догадайся что будет от распараллеливания?
125 orefkov
 
16.06.17
14:49
(124)
Тут должна быть картинка с Джеки Чаном, хватающимся за голову
Затем картинка facepalm.jpg
Насчёт Лаврова - не знаю, может быть, не хочу никого обижать.
126 Garykom
 
гуру
16.06.17
14:57
(125) Глянь ссылки из Ускорение СУБД с помощью GPU и CUDA, сча еще Map-D появилась
http://www.nvidia.ru/object/blog-big-data-gpu-database-ru.html

GPUDB это дело ближайшего будущего, фишка что обычные реляционные плохо работают исключая случаи сложных запросов, много простых смысла нет.
А вот NoSQL это тема на GPU!
127 Fragster
 
гуру
16.06.17
14:58
(120) только коучдб и прочие носкули так не работают, и по этому оперативных остатков там не бывает
128 Garykom
 
гуру
16.06.17
14:58
129 Garykom
 
гуру
16.06.17
14:59
(127) Если сделать очень-очень быстрый "подсчет остатков" то будет казаться что они вполне оперативные.
130 Вафель
 
16.06.17
15:04
(126) в 2013 году. И где они сейчас?
131 Garykom
 
гуру
16.06.17
15:10
(130) Тут https://www.mapd.com/
132 Fragster
 
гуру
16.06.17
15:11
(131) подожди. это реляционка. и без кластера.
133 orefkov
 
16.06.17
15:12
(126)
Это "ускорение ради ускорения".
Тому, у кого в руках молоток, всё вокруг кажется похожим на гвозди. Твое поведение напоминает неофитов, только что узнавших какую-ту хрень, и носящихся с ней, как с писаной торбой, пытаясь приткнуть её где надо и не надо.
Так вот в этой задаче - не надо. Она прекрасно решается простыми и понятными структурами хранения данных, без всякого топового железа и параллельных алгоритмов.
Вместо того, чтобы тупо при фиксации факта посчитать остаток и ЗАПИСАТЬ посчитанное, ты предлагаешь каждый раз загружать на видеокарту весь массив документов и считать всё сначала?
В чём профит? В том, что ты вместо избавляешься от одной лишней записи в момент проведения? Но ради этого придётся городить целый огород с параллельными расчётами, точно также организовывать запись промежуточных итогов для ускорения, да еще и думать, как это всё синхронизировать? На мой взгляд, крайне сомнительная выгода.
134 Fragster
 
гуру
16.06.17
15:13
(133) после (132) вообще интересно, как автор гуглит...
135 Garykom
 
гуру
16.06.17
15:13
(132) Угу самый идиотизм это пытаться делать виртуальную реляционку и эмуляцию sql на gpu.

Когда там самое то для NoSQL баз, прям просятся.
136 orefkov
 
16.06.17
15:14
(127)
Что значит "NoSql так не работают?" Они не разрешают мне хранить в базе то, что я захочу? Зачем они тогда мне?
137 Fragster
 
гуру
16.06.17
15:14
господи, да параллельный тэйбл скан там...
138 Garykom
 
гуру
16.06.17
15:14
(134) Блин это просто примеры реальных "реляционных" баз данных "ускоренных" на GPU.

Если на GPU запускать NoSQL базы с MapReduce выигрыш в скорости будет просто офигительный!
139 Fragster
 
гуру
16.06.17
15:14
из-за кучи ядер и наличия всего в оперативе получается быстро...
140 Garykom
 
гуру
16.06.17
15:16
(133) >Вместо того, чтобы тупо при фиксации факта посчитать остаток и ЗАПИСАТЬ посчитанное, ты предлагаешь каждый раз загружать на видеокарту весь массив документов и считать всё сначала?

Если внимательно прочитаешь вопрос в (0) то поймешь что как раз хочу этого избежать.
141 Fragster
 
гуру
16.06.17
15:16
вообще стандартные физические sql операторы параллелятся очень хорошо, проблема всегда в блокировках. nosql как раз "избавились от блокировок" путем отказа от оперативности. но и в sql также это есть, версионный режим, когда если запросу не принципиаольно - возвращается предыдущее зафиксированное состояние.
142 Fragster
 
гуру
16.06.17
15:16
nosql - это реально не для бизнеса, это лайки считать.
143 Garykom
 
гуру
16.06.17
15:18
Блин как обычно отклонились от темы и вместо "как это сделать" начинаем "нафига это делать" ))

Короче на данный момент меня не сильно волнует вопрос ускорения на GPU, это дело пока будущего.

Сейчас просто пытаюсь переложить конфу 1С на NoSQL (конкретно CouchDB) БД и все.
144 orefkov
 
16.06.17
15:19
(138)
Тебе пытаются втолковать, что задача подсчета остатков не требует mapreduce.
(140)
Тогда тоже не вижу плюсов от замены на NoSql. Ты в итоге придешь к такой же структуре хранения данных, что и в реляционной базе, только на самодельных костылях. Закат солнца вручную через key-value pairs получится.
145 Garykom
 
гуру
16.06.17
15:22
(144) А те кто пытаются это втолковать хотя бы VIEW в классических SQL серверах/бд используют?

Суть не 1С учетных систем тех же SAP'ов и прочих OEBS/Axapta как раз в полноценном использовании возможностей SQL сервера.

Я же просто пытаюсь использовать полноценно возможности NoSQL сервера.
146 Garykom
 
гуру
16.06.17
15:23
(144) Плюсы есть, и в принципе проблема уже решена еще на 1-й странице и без всяческих "тех же структур".
147 orefkov
 
16.06.17
15:24
Вообще, обычно обсуждение NoSql идёт по одному сценарию:
- Йоу, смотрите как быстро я в неё документ пишу и извлекаю!
- А выберите ка мне всех клиентов, купивших одеколон за месяц на сумму более 10 тыр.
- Ээээ, а зато тут можно всё параллельно
148 Garykom
 
гуру
16.06.17
15:25
(147) Скажи вот у тебя 100 пользователей одновременно запустили отчет который "выберите ка мне всех клиентов, купивших одеколон за месяц на сумму более 10 тыр. "

Что будет? И что будет в NoSQL ?
149 Garykom
 
гуру
16.06.17
15:28
И да я совсем не против обычного SQL, совсем не собираюсь от него отказываться и не призываю это делать других.

Суть применять NoSQL в тех задачах где он лучше работает.
Не выйдет чисто на CouchDB ну заюзаю Posgtres для актуальных остатков, где будут чисто ссылки-гуиды на доки, а сами доки буду в NoSQL хранить.
150 Garykom
 
гуру
16.06.17
15:29
(149) *Postgres
151 orefkov
 
16.06.17
15:31
(148)
Для начала окажется, что клиент не входит в ключ по документам. Потом окажется что вообще, клиент записывается просто строкой в данных документа. И т.д и т.п. Короче, решить можно, но надо неделю на программирование и десять серверов в параллель. Только и всего.
Если ты будешь говорить, что у тебя и документы по клиенту индексированы, и они отдельной сущностью сделаны, с включением в документ только ссылки - то чем это в итоге отличается от SQL баз?
SQL базы - это по сути надстройка над key-value хранилищами, и всё, что можно сделать на NoSql - точно так же можно сделать и в реляционной базе.
152 Garykom
 
гуру
16.06.17
15:33
(151) Документы да отдельная сущность, вот их содержимое нет, внутри.
153 orefkov
 
16.06.17
15:36
(152)
То есть чтобы отобрать все доки по конкретному клиенту нужно все доки перебрать?
154 Fragster
 
гуру
16.06.17
15:37
(153) параллельно!!!111одиодин в кластере!!!одинодин
155 Garykom
 
гуру
16.06.17
15:38
(153) Не нужно, они уже все заранее отобраны и сложены во view.

(154) Очень смешно...
156 Garykom
 
гуру
16.06.17
15:40
Прикольно когда обсирают осуждают нечто слыша об этом по верхам ))
157 drumandbass
 
16.06.17
15:42
(0) я тут маленькую базку писал, с sqlite уткнулся в транзакции параллельно записать не получается. Открыто соединение должно быть только в 1 месте и если идет команда sql происходит блокировка.

Короче перевел на MS SQL LocalDB
Зачем велосипед изобретать..
NoSQL только для хранения документов,картотек, не для вычислений и тем более уж параллельных.
158 Fragster
 
гуру
16.06.17
15:42
(155) да понятно, что по факту создается еще одна табличка по типу олапа, в которую демоны складывают периодически данные. эта периодичность в общем случае непрогнозируема. место, занимаемое данными - растет прямо пропорционально основным табличкам и в геометрической прогрессии по количеству разрезов информации.
159 Garykom
 
гуру
16.06.17
15:46
(158) Угадал, но "код демона" пишется на том же языке что и и сама система ))
160 orefkov
 
16.06.17
15:48
(159)
Это я как-раз и называю - "закат солнца вручную на костылях вокруг key-value pairs".
161 Garykom
 
гуру
16.06.17
15:49
(160) Главную фишку знаешь? "Программисту" не обязательно будет нуна учить SQL ))
162 Вафель
 
16.06.17
15:53
(161) не уж то это так сложно?
163 Вафель
 
16.06.17
15:54
(162)  не ужто какой нибудь LINQ проще чем селект на обычном SQL?
164 orefkov
 
16.06.17
15:55
(157)
В sqlite в один момент может писать только один писатель, блокируется вся база. Хотя, если для записи использовать только один процесс, которому другие шлют запросы на запись, и включить WAL - он пишет с охренительной скоростью. На своей машинке Corei5 3.2GHz с SATA винтом делал тест - начать транзакцию, записать десять строк в таблицу с тремя полями, зафиксировать транзакцию - в среднем 70000 транзакций в секунду. Периодически, когда скидывало кэш на диск, падало до 3000 транзакций в секунду.
При этом в WAL режиме записывающие не мешают читающим нисколько, то есть запросы других клиентов на чтение выполнялись во время транзакций записи.
165 Fragster
 
гуру
16.06.17
15:57
166 Fragster
 
гуру
16.06.17
15:58
167 Garykom
 
гуру
16.06.17
15:58
(162) (163) Никаких LINQ'ов обычный JavaScript код.
168 Fragster
 
гуру
16.06.17
15:59
169 Fragster
 
гуру
16.06.17
16:00
170 Fragster
 
гуру
16.06.17
16:01
ну и к вопросу о сложности...
171 Garykom
 
гуру
16.06.17
16:01
(165) Блин я им про фому а они мне про ерёму...

Не считайте меня дурным и не знающим про "индексы".

Никакой "индекс" не поможет когда у вас данные новые колбасят и тут же хотят видеть остатки, пускай и не совсем актуальные но быстро-быстро, еще быстрее...
И если тыщщи юзеров в одной базе.
172 Garykom
 
гуру
16.06.17
16:05
(170) (170) Эээ к вопросу о сложности а кто понял что справа вообще то много независимых штук?

1. есть функция MAP
2. есть функция REDUCE которая работает по результатам MAP но ей глубоко пофиг что там внутри, лишь бы структуру получить верную по полям
3. есть финализе которому тоже пофиг что там ранее
4. ну и фильтр на входе который можно менять не трогая функции!
173 Garykom
 
гуру
16.06.17
16:06
(172)+ Короче любую часть можно независимо переписать (это разные модули и они выполняются независимо и даже на разных нодах) и оно будет работать!!!

А терь попробуйте исправить запросик SQL...
174 Вафель
 
16.06.17
16:08
(173) У тебя js головного мозга. Как у одного товарища с .net
175 Garykom
 
гуру
16.06.17
16:11
(174) Инструмент/технологию товарища с .Net вполне успешно использую. А вы?
176 lock19
 
16.06.17
16:12
(175) А нам-то зачем?
177 Fragster
 
гуру
16.06.17
16:12
(173) по факту, то же самое можно сделать и со скулем в виде
mysql.query("select dim1,dim2").then((queryresult)=>{ result = queryresult.filter(/*тут то, что в where*/).map(/* тут преобразования полей из select*/).reduce(/* тут аггрегация*/).filter(/*тут фильтр having*/); return resolve(result)});

и никакой большой заслуги именно nosql движка тут нет. при этом map и filter параллелятся и так. reduce по сути своей однопоточен, так что преимуществ никаких у nosql нет
178 Fragster
 
гуру
16.06.17
16:15
не, когда я изучал js и дошел там до методов массива - я в очередной раз пожалел, что в 1с нет лямбд, да. но наличие map/reduce никак нельзя признавать "киллер фичей"
179 orefkov
 
16.06.17
16:16
(157)
sqlite - это кстати не NoSql. Это самая натуральная встраиваемая реляционная БД.
180 Fragster
 
гуру
16.06.17
16:18
тем более, что далеко не факт, что map и reduce функции исполняются сервером субд, а не клиентским приложением ;)
181 Garykom
 
гуру
16.06.17
16:19
(176) Действительно "а зачем?"

(177) У CouchDB из коробки отказоустойчивость кластера.

Попробуй на SQL взять допустим 10 компов (без выделенного главного/сервера) и на них поднять шустро работающую учетную систему.
Которая продолжает работать пока хотя бы один комп включен и ускоряет работу когда они назад включаются/добавляются.
182 Garykom
 
гуру
16.06.17
16:21
(181)+ Суть что то что 1С получается путем написания сервера 1С с разворачиванием кластера и т.д. тут все работает из коробки на "бесплатных" технологиях.

Короче для неких ниш решение вполне оптимальное и наилучшее. Представьте кассы которые без сервера шустро-шустро пашут без тормозов.
183 lock19
 
16.06.17
16:21
(181) Вот.
184 Garykom
 
гуру
16.06.17
16:22
(183) "Вам" не зачем )) Зачем мне это моя дело )))
185 orefkov
 
16.06.17
16:24
(181)
Даже не знаю, как еще объяснить. Ты пытаешься оправдать вещь возможностью самой вещи, не пытаясь подумать, а ценна ли эта возможность сама по себе?
Что например, если сделать традиционную бд с грамотно организованным хранилищем, то сама необходимость в кластере из десяти серверов отпадёт?
Ты же не знаешь, как внутри их кластер реализован?
Поэтому, допустим, чем он отличается от десятка серверов с MS-SQL с настроенной авто-репликацией - не сможешь объяснить?
186 orefkov
 
16.06.17
16:26
(182)
У меня на работе кассы шустро-шустро пашут без тормозов.
Без NoSql и кластеров. На sqlite :)
187 Garykom
 
гуру
16.06.17
16:32
(186) И скажи если взять сначала пробить на всех кассах а потом через пару минут все кроме одной вырубить, одна оставшаяся будет сообщать о продажах всех остальных?

Тут это "из коробки".
188 Garykom
 
гуру
16.06.17
16:32
(187)+ Отдельного сервера кроме касс нету
189 lock19
 
16.06.17
16:35
(187) Ты хочешь базу между клиентами распределять?
190 orefkov
 
16.06.17
16:36
Ты немного не понимаешь требования к кассам. Она не должна отчитываться за других. Она должна человеку чек пробить, даже если сеть пропала. А когда сеть есть, скинуть продажу в учётную систему. Или у тебя это магия и при отсутствии сети работает? Через астрал?
191 Fragster
 
гуру
16.06.17
16:36
(187) ну потеряются часть транзакций, да и буй с ним, да...
192 lock19
 
16.06.17
16:37
"оставшаяся будет сообщать о продажах" - в этом месте предвидится затык
193 orefkov
 
16.06.17
16:38
(189)
Ага. Всю базу всех продаж реплицировать на каждую кассу. Понял, да. На каждой кассе поставим Xeon + 128Gb RAM + 1TB винт :)
194 Garykom
 
гуру
16.06.17
16:41
"В качестве домашнего задания можете провести такой эксперимент. Уроните одну ноду. Убедитесь, что документ можно обновить, используя только оставшиеся две ноды. Затем поднимите упавшую ноду и быстро-быстро запросите с нее документ. Убедитесь, что никакого конфликта не происходит и вы получаете последнюю ревизию."
http://eax.me/couchdb/

Это если кто по английски не может
195 orefkov
 
16.06.17
16:41
+(193)
А, еще крутой GPU нужен, обязательно. Будет остатки в паралель считать. А когда затишье, кассир в думчик поиграет :)
196 Garykom
 
гуру
16.06.17
16:43
(193) 4 а лучше 16 Gb RAM хватит за глаза
https://developer.couchbase.com/documentation/server/current/install/pre-install.html
197 lock19
 
16.06.17
16:43
(194) Это всё хорошо. Ноды у тебя где будут?
198 Garykom
 
гуру
16.06.17
16:46
(197) на планшетах/мобильных кассах
199 Fragster
 
гуру
16.06.17
16:46
(194) для одного документа и локальной сети - предполагаю, что время синхронизации пренебрежимо мало.
а теперь представь ситуацию нарушения связности между нодами вместо падения, с одновременным исправлением одних данных в двух нодах. или когда канал между нодами - не 1гбит сеть, да и данных с сотню мегабайт накопилось
200 Garykom
 
гуру
16.06.17
16:46
(198)+ и еще на ТСД по складу бегать... и стоять на десктопах менагеров
201 Вафель
 
16.06.17
16:47
(196) На каждую кассу по 16 гиг?
202 Fragster
 
гуру
16.06.17
16:47
сферические примеры кластеров в вакууме часто разбиваются о реальность каналов связи
203 Вафель
 
16.06.17
16:48
И на ТСД держать реплику все базы????
204 Garykom
 
гуру
16.06.17
16:48
(199) Сетка не локалка между нодами даже не рассматриваю пока, при плохих каналах согласен что синхронизация будет очень долгой.

Блин мне нужна некая технология, я ее нашел и пытаюсь заюзать как нуна. Так как 1С без плясок с бубнами и разного программного шаманства не позволяет.
205 Garykom
 
гуру
16.06.17
16:49
(203) Шутки сча понимать надо, в будущем это будет не шутка
206 Fragster
 
гуру
16.06.17
16:49
(204) получение оперативных данных - это не "как нуна"
207 Garykom
 
гуру
16.06.17
16:50
(206) Если мы знаем что "вот эти данные не оперативные" то легко можем подождать или сделать спецзапрос оперативных.
208 Вафель
 
16.06.17
16:50
(204) Ну чтож дерзай, как сделаешь расскажешь
209 Garykom
 
гуру
16.06.17
16:51
У меня такое подозрение что адепты FTP спорят с любителем торрентов...
210 lock19
 
16.06.17
16:51
В теме слишком мало блокчейнов...
211 Fragster
 
гуру
16.06.17
16:52
(210) ты сделал мой день!
212 Вафель
 
16.06.17
16:52
(209) Только вот по фтп каждый берет ровно свой файлик в 100к, а через торренты вся база мигрирует в 100г
213 Garykom
 
гуру
16.06.17
16:53
(210) (211) шшш тут нельзя про это...
214 Fragster
 
гуру
16.06.17
16:53
(207) а как ты поймешь, что данные не оперативные при нарушении связности?
215 Garykom
 
гуру
16.06.17
16:53
(212) Странно... почему я через торренты беру (и раздаю) только тот файлик хоть пару байт (на самом деле захватываю и соседние ибо блоки) а?
216 Fragster
 
гуру
16.06.17
16:59
(215) да нет, при запросе select from where ты получишь только нужные тебе данные, при репликации - ты вынужден получить все + постоянно отслеживать изменения. это на самом деле большая проблема. например при попытке изменить одновременно документ в двух местах, когда тебе пофиг, все хорошо, а вот "объект уже захвачен для редактирования" когда не пофиг, уже не получится.
217 Garykom
 
гуру
16.06.17
17:05
(214) Там немного интереснее и проще есть встроенный механизма разрешения конфликтов с сохранением конфликтующих копий
http://guide.couchdb.org/draft/conflicts.html
218 Garykom
 
гуру
16.06.17
17:12
(217)+ И да нарушение связности так же легко определяется и можно это вручную отработать уже.

Но блин это полезли в моменты которые пока даже не думал, мне бы пока просто падение 1-2 серверов исключить.

Кстати! Там же через http прокси обращение к CouchDB работает, короче что кластер развалится на несколько "работающих" групп нод маловероятно.
Суть что да можно настроить напрямую на ноды связь, а можно через прокси который нагрузку между нодами разруливает
219 Fragster
 
гуру
16.06.17
17:19
(218) ну так тогда нафиг этот "кластер", если прокся упадет?
220 Garykom
 
гуру
16.06.17
17:22
(219) проксю легко и на лету поменять же прямо из клиента