|
В рамках импортозамещения предлагаю обсудить новую базу (Днипра)
|
|||
---|---|---|---|
#18+
И то, что вложенных транзакций нет, это не упрощает поддержку и не делает код более понятным. Это поддержку усложняет и делает код более сложным (цикломатическая сложность кода возрастает, следовательно возрастает сложность тестированич). Это просто техническое ограничение СУБД. Ну нет там транзакционного стэка, видимо сложно его делать, потому и функционала такого нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2016, 09:57 |
|
В рамках импортозамещения предлагаю обсудить новую базу (Днипра)
|
|||
---|---|---|---|
#18+
У оракла и ms sql server есть сейвпойнты, с их помощью "вложенные транзакции" и реализуются ... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2016, 10:33 |
|
В рамках импортозамещения предлагаю обсудить новую базу (Днипра)
|
|||
---|---|---|---|
#18+
stop, прежде чем расписывать то, где и как Ваш код нарушает принципы SOLID, хотел бы узнать описание следующих параметров: Код: c# 1. 2. 3.
или дайте ссылку на документацию к методам DB.GetWhere и DB.GetPartDoc<T> . ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2016, 09:42 |
|
В рамках импортозамещения предлагаю обсудить новую базу (Днипра)
|
|||
---|---|---|---|
#18+
skyANAstop, прежде чем расписывать то, где и как Ваш код нарушает принципы SOLID, хотел бы узнать описание следующих параметров: Код: c# 1. 2. 3.
или дайте ссылку на документацию к методам DB.GetWhere и DB.GetPartDoc<T> . 19067466 ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2016, 11:53 |
|
В рамках импортозамещения предлагаю обсудить новую базу (Днипра)
|
|||
---|---|---|---|
#18+
stopskyANAstop, прежде чем расписывать то, где и как Ваш код нарушает принципы SOLID, хотел бы узнать описание следующих параметров: Код: c# 1. 2. 3.
или дайте ссылку на документацию к методам DB.GetWhere и DB.GetPartDoc<T> . 19067466 Документация конечно не лучшая. К методу GetWhere конечно есть скудное описание: find documents by filter, - и примеры из которых в принципе понятно. А вот GetPartDoc<T> не имеет ни описания, ни примеров, где он принимает 4, а не 3 параметра. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2016, 14:51 |
|
В рамках импортозамещения предлагаю обсудить новую базу (Днипра)
|
|||
---|---|---|---|
#18+
Про UpdPartDoc<T> с 4-мя парамтрами кстати тоже ничего нет в документации. Но я так понял, что это как хранится в БД: Код: c# 1.
а это как отображается на свойства объекта: Код: c# 1.
верно? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2016, 15:08 |
|
В рамках импортозамещения предлагаю обсудить новую базу (Днипра)
|
|||
---|---|---|---|
#18+
skyANAstopпропущено... 19067466 Документация конечно не лучшая. К методу GetWhere конечно есть скудное описание: find documents by filter, - и примеры из которых в принципе понятно. А вот GetPartDoc<T> не имеет ни описания, ни примеров, где он принимает 4, а не 3 параметра. Спасибо за замечание. Я добавлю. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2016, 15:24 |
|
В рамках импортозамещения предлагаю обсудить новую базу (Днипра)
|
|||
---|---|---|---|
#18+
skyANAПро UpdPartDoc<T> с 4-мя парамтрами кстати тоже ничего нет в документации. Но я так понял, что это как хранится в БД: Код: c# 1.
а это как отображается на свойства объекта: Код: c# 1.
верно? Всё верно. Код настолько простой что в нем можно разобраться даже без документации =) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2016, 15:24 |
|
В рамках импортозамещения предлагаю обсудить новую базу (Днипра)
|
|||
---|---|---|---|
#18+
stopskyANAПро UpdPartDoc<T> с 4-мя парамтрами кстати тоже ничего нет в документации. Но я так понял, что это как хранится в БД: Код: c# 1.
а это как отображается на свойства объекта: Код: c# 1.
верно? Всё верно. Код настолько простой что в нем можно разобраться даже без документации =) Не льстите себе :) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2016, 16:58 |
|
В рамках импортозамещения предлагаю обсудить новую базу (Днипра)
|
|||
---|---|---|---|
#18+
Bubba KushВложенной называется транзакция, коммит которой фиксирует операции транзакции только при фиксации обрамляющей транзакции и которая способна откатывать изменения только те, что она совершила от времени старта вложенной транзакции до времени отката. Это достаточно очевидно любому программисту, знакомому с понятием стек, рекурсия и вложенность. Не понимаю, к чему демагогия про автономность и прочее? Реализация вложенных транзакций обеспечивает повторное использование кода с операторами управления транзакциями без необходимости писать избыточные ифы. +1, правильный и логичный путь stopИ если проггер написал РОЛЛБЕК то он подразумевает что все что внутри благополучно откатится на всех уровнях, это не гуд, только текущую должно и COMMIT не должен влиять на обрамляющую транзакцию, он просто говорит, что "атом" транзакции выполнился и может быть отменён вышележащим РОЛЛБЕКом если уж хочется глобально, то придумайте какой ни будь abort с месагой, который будет РОЛЛБЕКи делать вверх по иерархии ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2016, 06:45 |
|
В рамках импортозамещения предлагаю обсудить новую базу (Днипра)
|
|||
---|---|---|---|
#18+
Роллбек обрамляющей откатывает все вложенные в нее транзакции, даже если они коммитились. Вверх по уровням роллбек не распространяется. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2016, 09:46 |
|
В рамках импортозамещения предлагаю обсудить новую базу (Днипра)
|
|||
---|---|---|---|
#18+
stopРоллбек обрамляющей откатывает все вложенные в нее транзакции, даже если они коммитились. Вверх по уровням роллбек не распространяется. ну да не так выразился? stopИ если проггер написал РОЛЛБЕК то он подразумевает что все что внутри благополучно откатится на всех уровнях, ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2016, 19:01 |
|
В рамках импортозамещения предлагаю обсудить новую базу (Днипра)
|
|||
---|---|---|---|
#18+
Это треш. Тролли в угаре. Код: plaintext 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2016, 23:38 |
|
В рамках импортозамещения предлагаю обсудить новую базу (Днипра)
|
|||
---|---|---|---|
#18+
Опять якось невдобно получилось. Еще один стандартный бенчмарк для Монго. 50 тыс. документов. В каждом массив на 100 целых чисел. Цель запроса - пробежаться по всем документам и добавить 101 целое число в массив каждого документа, короче говоря операция $PUSH для Монго и Insert для Днипры. Запрос вообще самый самый базовый ниразу не подбирался. Например если вы на Монге будете делать блог, то каждая статья также будет содержать массив с комментариями внизу, а пост комментария добавление этого самого комментария в конец этого массива. Сам запрос на апдейт этого дела ( незабываем обращать внимание на синтаксис ) Монго драйвер Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
Днипро драйвер Код: c# 1. 2. 3. 4. 5. 6.
Результаты ожидаемы. Днипра почти в 20ть раз быстрее . (59 миллисекунд против 1 секунды у Монго). При этом Днипра - честная версионная транзакция, честный подтвержденный коммит на диск, все элементы в массиве проиндексированы автоматически. Монга - отложеная запись, без транзакций. Дополнительно еще нужно создавать индексы. Выводы: Архитектура Днипры построена так, что не вызывает при добавлении нового элемента в массив документа его перезапись. Монга, Постгри, Кеш и вся эта братия перезаписывает. При бОльшем количестве элементов, отставание будет только усугублятся. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.05.2016, 11:01 |
|
В рамках импортозамещения предлагаю обсудить новую базу (Днипра)
|
|||
---|---|---|---|
#18+
stop, что за поле Val, по которому делается выборка? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.05.2016, 09:13 |
|
В рамках импортозамещения предлагаю обсудить новую базу (Днипра)
|
|||
---|---|---|---|
#18+
skyANAstop, что за поле Val, по которому делается выборка? Это мембер класса Код: c# 1. 2. 3. 4. 5.
Дальше создается 50 тыс обьектов этого класса, где Val = 1 И дальше этот запрос. "Добавить в массив Arr один элемент где Val = 1" ... |
|||
:
Нравится:
Не нравится:
|
|||
03.05.2016, 11:33 |
|
В рамках импортозамещения предлагаю обсудить новую базу (Днипра)
|
|||
---|---|---|---|
#18+
Ясно.. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.05.2016, 13:04 |
|
В рамках импортозамещения предлагаю обсудить новую базу (Днипра)
|
|||
---|---|---|---|
#18+
Когда перед тобой стоит задача быстро написать понятный и хорошо поддерживаемый проект, всегда стоит задача выбора СУБД. Бекенд в своей классической форме подразумевает создать модель данных и слой бизнесс логики работы с этими данными, который на начальном этапе скорей всего сводится к CRUD (Create Read Update Delete) операциям. В данном случае выбор No Sql решения на базе украинской СУБД Днiпро был достаточно и необычен и рискован. Особенно если ты отлаживаешь проект и базу данных одновременно :) Но, чем больше ошибок будет выловлено тем лучше, на чем то же нужно тестировать субд. Поэтому я начал проект, который уже при первом приближении декомпозировался в 30+ «таблиц» и 50+ «хранимок» Суть самого проекта: Чтото вроде социальной сети с элементами конструкторов форм, визардами, лайками, приватными чатами, оповещениями всех обо всем, системой комментариев, лентами сообщений и тд. Впечетления. Все оказалось не так плохо. Весь Data Access Layer который отвечает за коммуникацию с базой данных представлен здесь https://github.com/Bazist/DniproExamples/blob/master/Booben/Booben/Controllers/DAL.cs Каждая «хранимка» занимает всего несколько строк кода и по сути своей шаблонна. Типичный метод GetWhere(шаблон части джисона).Select/Update/Insert/Delete(шаблон части джисона). Есть более сложные хранимки, вида: «Вставить обьект Event всем подписчикам этой страницы пользователя.» (AddCommentToPage процедура в исходнике выше, как пример) Благодаря статической типизации, если модель меняется, то ошибки отлавливаются на этапе компиляции. Все сами по себе методы шаблонны, можно набросать 3-5 «хранимок» и не сделать ниодной ошибки, ошибится достаточно тяжело. Сама модель данных представляет собой крупную иерархию класса User. Уровень вложенности достигает до 6-7 сущностей, что в реляционной модели означает 5-6 джоинов. Вся модель представлена вот здесь https://github.com/Bazist/DniproExamples/tree/master/Booben/Booben/Models После того как у нас есть модель данных в БД и есть уровень работы с этими данными, остается на эту модель только натянуть VIews. Пресловутый MVC паттерн. Но тут все настолько просто, что это даже больше к дизайну чем к логике. PS: По быстродействию и архитектуре самой СУБД уже было обсуждение Сейчас впечетления такие, что программу из 90х запустили на мощном компьютере ) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2016, 19:16 |
|
В рамках импортозамещения предлагаю обсудить новую базу (Днипра)
|
|||
---|---|---|---|
#18+
Баз привет. Выдалась минутка. Чо как? Есть updates по ветке Java-клиента? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2016, 12:39 |
|
В рамках импортозамещения предлагаю обсудить новую базу (Днипра)
|
|||
---|---|---|---|
#18+
maytonБаз привет. Выдалась минутка. Чо как? Все по страому. В отпуск пока что собираюсь. maytonЕсть updates по ветке Java-клиента? Пока нет, используется старый Джава драйвер. Написать ОРМ драйвер под Джаву также как это сделано под Дот Нет пока только в планах. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2016, 11:34 |
|
В рамках импортозамещения предлагаю обсудить новую базу (Днипра)
|
|||
---|---|---|---|
#18+
Up какие новости? ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2016, 00:22 |
|
В рамках импортозамещения предлагаю обсудить новую базу (Днипра)
|
|||
---|---|---|---|
#18+
maytonUp какие новости? Выложил в сеть сердце Стебелька. Все еще думаете что с Монго тесты както подтасованы ? Шах и мат господа писимисты. Посмотрите тогда вот сюда, на каком движке собрана СУБД Днiпро slavik@slavik:~$ /home/slavik/Documents/HArray/HArray/bin/Release/HArrayMono === HArrayInt VS std::map<int,int> testing === Insert/Search 1000000 SEQUENCE keys (4 bytes each) ... HArrayInt => Insert: 14 msec, Search: 3 msec. std::map => Insert: 282 msec, Search: 166 msec. Insert/Search 3000000 SEQUENCE keys (4 bytes each) ... HArrayInt => Insert: 32 msec, Search: 10 msec. std::map => Insert: 1076 msec, Search: 562 msec. Insert/Search 5000000 SEQUENCE keys (4 bytes each) ... HArrayInt => Insert: 54 msec, Search: 16 msec. std::map => Insert: 2107 msec, Search: 1066 msec. Insert/Search 7000000 SEQUENCE keys (4 bytes each) ... HArrayInt => Insert: 77 msec, Search: 22 msec. std::map => Insert: 3014 msec, Search: 1505 msec. Insert/Search 9000000 SEQUENCE keys (4 bytes each) ... HArrayInt => Insert: 95 msec, Search: 28 msec. std::map => Insert: 4021 msec, Search: 2017 msec. Insert/Search 1000000 RANDOM keys (4 bytes each) ... HArrayInt => Insert: 15 msec, Search: 15 msec. std::map => Insert: 692 msec, Search: 619 msec. Insert/Search 3000000 RANDOM keys (4 bytes each) ... HArrayInt => Insert: 47 msec, Search: 47 msec. std::map => Insert: 2653 msec, Search: 2430 msec. Insert/Search 5000000 RANDOM keys (4 bytes each) ... HArrayInt => Insert: 84 msec, Search: 84 msec. std::map => Insert: 4908 msec, Search: 4445 msec. Insert/Search 7000000 RANDOM keys (4 bytes each) ... HArrayInt => Insert: 123 msec, Search: 126 msec. std::map => Insert: 7253 msec, Search: 6700 msec. Insert/Search 9000000 RANDOM keys (4 bytes each) ... HArrayInt => Insert: 167 msec, Search: 170 msec. std::map => Insert: 9755 msec, Search: 9066 msec. Insert/Search 1000000 PERIOD keys (4 bytes each) ... HArrayInt => Insert: 14 msec, Search: 4 msec. std::map => Insert: 276 msec, Search: 165 msec. Insert/Search 3000000 PERIOD keys (4 bytes each) ... HArrayInt => Insert: 43 msec, Search: 9 msec. std::map => Insert: 989 msec, Search: 551 msec. Insert/Search 5000000 PERIOD keys (4 bytes each) ... HArrayInt => Insert: 70 msec, Search: 16 msec. std::map => Insert: 1931 msec, Search: 1007 msec. Insert/Search 7000000 PERIOD keys (4 bytes each) ... HArrayInt => Insert: 99 msec, Search: 22 msec. std::map => Insert: 2929 msec, Search: 1503 msec. Insert/Search 9000000 PERIOD keys (4 bytes each) ... HArrayInt => Insert: 126 msec, Search: 30 msec. std::map => Insert: 3990 msec, Search: 2005 msec. === HArrayVarRAM VS std::map<BinKey,int> testing === Insert/Search 1000000 SEQUENCE keys (16 bytes each) ... HArrayVarRAM => Insert: 143 msec, Search: 221 msec. std::map => Insert: 776 msec, Search: 820 msec. Insert/Search 3000000 SEQUENCE keys (16 bytes each) ... HArrayVarRAM => Insert: 590 msec, Search: 846 msec. std::map => Insert: 2986 msec, Search: 2999 msec. Insert/Search 5000000 SEQUENCE keys (16 bytes each) ... HArrayVarRAM => Insert: 1094 msec, Search: 1449 msec. std::map => Insert: 5273 msec, Search: 5369 msec. Insert/Search 7000000 SEQUENCE keys (16 bytes each) ... HArrayVarRAM => Insert: 1588 msec, Search: 2114 msec. std::map => Insert: 7894 msec, Search: 8856 msec. Insert/Search 9000000 SEQUENCE keys (16 bytes each) ... HArrayVarRAM => Insert: 2225 msec, Search: 2830 msec. std::map => Insert: 10583 msec, Search: 11053 msec. Insert/Search 1000000 RANDOM keys (16 bytes each) ... HArrayVarRAM => Insert: 70 msec, Search: 89 msec. std::map => Insert: 709 msec, Search: 710 msec. Insert/Search 3000000 RANDOM keys (16 bytes each) ... HArrayVarRAM => Insert: 185 msec, Search: 221 msec. std::map => Insert: 2683 msec, Search: 2705 msec. Insert/Search 5000000 RANDOM keys (16 bytes each) ... HArrayVarRAM => Insert: 297 msec, Search: 391 msec. std::map => Insert: 4933 msec, Search: 5025 msec. Insert/Search 7000000 RANDOM keys (16 bytes each) ... HArrayVarRAM => Insert: 607 msec, Search: 653 msec. std::map => Insert: 7448 msec, Search: 7504 msec. Insert/Search 9000000 RANDOM keys (16 bytes each) ... HArrayVarRAM => Insert: 765 msec, Search: 887 msec. std::map => Insert: 10028 msec, Search: 10331 msec. Insert/Search 1000000 PERIOD keys (16 bytes each) ... HArrayVarRAM => Insert: 112 msec, Search: 167 msec. std::map => Insert: 714 msec, Search: 711 msec. Insert/Search 3000000 PERIOD keys (16 bytes each) ... HArrayVarRAM => Insert: 412 msec, Search: 563 msec. std::map => Insert: 2681 msec, Search: 2703 msec. Insert/Search 5000000 PERIOD keys (16 bytes each) ... HArrayVarRAM => Insert: 694 msec, Search: 984 msec. std::map => Insert: 4961 msec, Search: 4999 msec. Insert/Search 7000000 PERIOD keys (16 bytes each) ... HArrayVarRAM => Insert: 1277 msec, Search: 1444 msec. std::map => Insert: 7328 msec, Search: 7537 msec. Insert/Search 9000000 PERIOD keys (16 bytes each) ... HArrayVarRAM => Insert: 1606 msec, Search: 1889 msec. std::map => Insert: 9901 msec, Search: 10218 msec. === HArrayVarRAM VS std::map<StrKey,int> testing === Insert/Search 1000000 SIMILAR keys (64 bytes each) ... HArrayVarRAM => Insert: 261 msec, Search: 276 msec. std::map => Insert: 1229 msec, Search: 1161 msec. Insert/Search 2000000 SIMILAR keys (64 bytes each) ... HArrayVarRAM => Insert: 592 msec, Search: 682 msec. std::map => Insert: 2792 msec, Search: 2577 msec. Insert/Search 3000000 SIMILAR keys (64 bytes each) ... HArrayVarRAM => Insert: 1022 msec, Search: 1173 msec. std::map => Insert: 4413 msec, Search: 4362 msec. Insert/Search 1000000 RANDOM keys (64 bytes each) ... HArrayVarRAM => Insert: 269 msec, Search: 272 msec. std::map => Insert: 984 msec, Search: 889 msec. Insert/Search 2000000 RANDOM keys (64 bytes each) ... HArrayVarRAM => Insert: 640 msec, Search: 651 msec. std::map => Insert: 2164 msec, Search: 2007 msec. Insert/Search 3000000 RANDOM keys (64 bytes each) ... HArrayVarRAM => Insert: 1053 msec, Search: 1072 msec. std::map => Insert: 3570 msec, Search: 3271 msec. Больше о проекте https://github.com/Bazist/HArray ... |
|||
:
Нравится:
Не нравится:
|
|||
18.11.2016, 21:34 |
|
В рамках импортозамещения предлагаю обсудить новую базу (Днипра)
|
|||
---|---|---|---|
#18+
HArrayВсе еще думаете...Вот польстил себе так польстил :) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2016, 09:07 |
|
В рамках импортозамещения предлагаю обсудить новую базу (Днипра)
|
|||
---|---|---|---|
#18+
Но ведь правда. Эта СУБД единственная кто начала с переработки базовых принципов поисковых алгоритмов. Она единственная кто основана на супербыстром Trie, а не на какихто попсовых модификациях бинарных деревьев или хештаблицах. Это почти революция в СУБД строении. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2016, 12:42 |
|
|
start [/forum/topic.php?fid=35&msg=39218920&tid=1552251]: |
0ms |
get settings: |
7ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
169ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
others: | 238ms |
total: | 502ms |
0 / 0 |