Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Сравнение СУБД Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 4 5 [6] 7 8 9 10 .. 13   вперед  Ctrl
 Re: В рамках импортозамещения предлагаю обсудить новую базу (Днипра)  [new]
Adx
Guest
stop
Adx
Добавлю по скорости MS SQL. Посмотрел Ваше сравнение.
Если бы у меня сотрудник написал написал такой код, какой написали Вы, я бы его уволил. Ну не уволил, но такого на работу бы точно не взял. Вы абсолютно ничего не понимаете в RDBMS. Да-да, я понимаю что Вы не "чукча читатель", но тогда не позорьтесь, не приводите такие примеры.


Этот код писал не я, а писал такойже как Вы девелопер, который решил во что бы то нистало "показать как надо".
У Вас есть шанс переписать его правильно. Обещаю перемерять и перевыложить бенчмарки с "правильным кодом" у себя.


Не надо меня сравнивать с человеком, который написал такой код. Писать код для Ваших тестов неинтересно, поскольку никому не нужен тест на 100 одинаковых записях. Возьмите миллион РАЗНЫХ записей, на них и тестируйте. Зачем создавать индексы, если поиск все равно идет полным перебором?
6 апр 16, 12:26    [19022628]     Ответить | Цитировать Сообщить модератору
 Re: В рамках импортозамещения предлагаю обсудить новую базу (Днипра)  [new]
stop
Member [заблокирован]

Откуда: blog.pikosec.com
Сообщений: 405
Adx
stop
пропущено...


Этот код писал не я, а писал такойже как Вы девелопер, который решил во что бы то нистало "показать как надо".
У Вас есть шанс переписать его правильно. Обещаю перемерять и перевыложить бенчмарки с "правильным кодом" у себя.


Не надо меня сравнивать с человеком, который написал такой код. Писать код для Ваших тестов неинтересно, поскольку никому не нужен тест на 100 одинаковых записях. Возьмите миллион РАЗНЫХ записей, на них и тестируйте. Зачем создавать индексы, если поиск все равно идет полным перебором?


Я вас сравниваю, потому что как всегда, заявлений много.
А как к делу ...
6 апр 16, 12:28    [19022640]     Ответить | Цитировать Сообщить модератору
 Re: В рамках импортозамещения предлагаю обсудить новую базу (Днипра)  [new]
Adx
Guest
stop
Я вас сравниваю, потому что как всегда, заявлений много.
А как к делу ...


Я участвовать в разработке и тестировании не собирался, это я сразу написал.
Если Вам нужна помощь, так и напишите:
"Нужна помощь в разработке и тестировании новой базы (Днипра)",
а не "В рамках импортозамещения предлагаю обсудить новую базу (Днипра)"
Отметил очевидные вещи, так Вы сразу воспринимаете их как оскорбление.
Вы же предлагаете участвовать в обсуждении, относитесь тогда нормально к критике.
Не хотите - не надо, отвечайте только на хвалебные отзывы.

PS
Ни в коем случае не стремлюсь отговорить Вас от работы над базой. Кто, знает, может через пять лет будете в числе ведущих поставщиков СУБД.
6 апр 16, 13:20    [19023005]     Ответить | Цитировать Сообщить модератору
 Re: В рамках импортозамещения предлагаю обсудить новую базу (Днипра)  [new]
Владимир2012
Member [заблокирован]

Откуда:
Сообщений: 1460
stop

Как по мне у вас интересная разработка и у нее уже имеется некая /и не малая/ ниша в использовании.
То что вы стараетесь выйти на уровень ниши, занимаемых СУБД, на мой взгляд ошибочный подход.
И если будете его развивать, то скорее всего погубите все то хорошее, что у вас у же имеется.

Одна из ниш /экспромтом/ - использовать возможности вашего проекта например для организации некой
внутренней инфраструктуры данных.
Например для решения задач обмена данными ... ... ...

Удачи не желаю /это для неверующих/.

С Богом!
6 апр 16, 13:37    [19023102]     Ответить | Цитировать Сообщить модератору
 Re: В рамках импортозамещения предлагаю обсудить новую базу (Днипра)  [new]
stop
Member [заблокирован]

Откуда: blog.pikosec.com
Сообщений: 405
Владимир2012
stop

Как по мне у вас интересная разработка и у нее уже имеется некая /и не малая/ ниша в использовании.
То что вы стараетесь выйти на уровень ниши, занимаемых СУБД, на мой взгляд ошибочный подход.
И если будете его развивать, то скорее всего погубите все то хорошее, что у вас у же имеется.

Одна из ниш /экспромтом/ - использовать возможности вашего проекта например для организации некой
внутренней инфраструктуры данных.
Например для решения задач обмена данными ... ... ...

Удачи не желаю /это для неверующих/.

С Богом!


Спасибо за отзыв !
Конечноже не мало времени потрачено чтобы сделать действительно удобный инструмент.
6 апр 16, 13:52    [19023155]     Ответить | Цитировать Сообщить модератору
 Re: В рамках импортозамещения предлагаю обсудить новую базу (Днипра)  [new]
stop
Member [заблокирован]

Откуда: blog.pikosec.com
Сообщений: 405
Adx
stop
Я вас сравниваю, потому что как всегда, заявлений много.
А как к делу ...


Я участвовать в разработке и тестировании не собирался, это я сразу написал.
Если Вам нужна помощь, так и напишите:
"Нужна помощь в разработке и тестировании новой базы (Днипра)",
а не "В рамках импортозамещения предлагаю обсудить новую базу (Днипра)"
Отметил очевидные вещи, так Вы сразу воспринимаете их как оскорбление.
Вы же предлагаете участвовать в обсуждении, относитесь тогда нормально к критике.
Не хотите - не надо, отвечайте только на хвалебные отзывы.

PS
Ни в коем случае не стремлюсь отговорить Вас от работы над базой. Кто, знает, может через пять лет будете в числе ведущих поставщиков СУБД.


Да есть уже разные темы.
Ладно, вернемся в более конструктивное русло.
Предлагаю подумать над следующей задачей.
Есть каскадные транзакции.

Чтото вроде
BeginTran(ReadCommited)
...BeginTran(ReadCommited)
......BeginTran(Snapshot)
......CommitTran()
...CommitTran()
CommitTran()

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

Примеры реализации в других БД ?
И главное, почему так реализовано.
Пока склоняюсь к версии, что верхний уровень изоляции не должни превышать внутреннии транзакции.
Этот же метод наиболее легок в реализации.
6 апр 16, 13:57    [19023183]     Ответить | Цитировать Сообщить модератору
 Re: В рамках импортозамещения предлагаю обсудить новую базу (Днипра)  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 11092
stop,

в других СУБД есть
- обычные транзакции
- 2PC транзакции
- точки сохранения (некоторые их называют вложенными транзакциями, но на деле это не так)
- автономные транзакции

Последние действительно вложенные.
6 апр 16, 14:24    [19023310]     Ответить | Цитировать Сообщить модератору
 Re: В рамках импортозамещения предлагаю обсудить новую базу (Днипра)  [new]
kdv
Member

Откуда: iBase.ru
Сообщений: 30260
stop,

якобы вложенные транзакции в полноценном виде вообще нигде не реализованы.

stop
Пока склоняюсь к версии, что верхний уровень изоляции не должни превышать внутреннии транзакции.

тут не нужно версий. Если исходная транзакция имеет уровень изолированности snapshot, вложенные транзакции никак не могут иметь уровень изолированности read committed. Вернее, могут, но толку от этого не будет никакого. Потому что в контексте внешней транзакции они все равно будут видеть только snapshot.
6 апр 16, 14:30    [19023355]     Ответить | Цитировать Сообщить модератору
 Re: В рамках импортозамещения предлагаю обсудить новую базу (Днипра)  [new]
stop
Member [заблокирован]

Откуда: blog.pikosec.com
Сообщений: 405
Честные каскады.
Протестировано.

void testCascadeTran()
{
	char jsonResult[1024];
 
	DniproDB* db = new DniproDB();
	db->init();
 
	uint docID;
 
	{//LEVEL 1 ===============================================================
	 //tran level 1
		uint tranLevel1 = db->beginTran(READ_COMMITED_TRAN);
 
		//add doc with one attribute, level 1
		docID = db->addDoc("{'attr1':'lev1'}", tranLevel1);
 
		{//LEVEL 2 ==============================================================
		 //tran level 2
			uint tranLevel2 = db->beginTran(READ_COMMITED_TRAN, tranLevel1);
 
			//add to doc one new attribute
			db->insPartDoc("{'attr2':'lev2'}", docID, tranLevel2);
 
			//in doc 2 attributes {'attr1':'Lev1', 'attr2':'Lev2'}
			db->getPartDoc("{'attr1':$, 'attr2':$, 'attr3':$}", jsonResult, docID, tranLevel2);
 
			{//LEVEL 3 ==============================================================
			 //tran level 3
				uint tranLevel3 = db->beginTran(READ_COMMITED_TRAN, tranLevel2);
 
				//add to doc next attribute
				db->insPartDoc("{'attr3':'lev3'}", docID, tranLevel3);
 
				//in doc 3 attributes {'attr1':'Lev1', 'attr2':'Lev2', 'attr3':'Lev3'}
				db->getPartDoc("{'attr1':$, 'attr2':$, 'attr3':$}", jsonResult, docID, tranLevel2);
 
				db->commitTran(tranLevel3);
			}//=====================================================================
 
			 //in doc 3 attributes {'attr1':'Lev1', 'attr2':'Lev2', 'attr3':'Lev3'}
			db->getPartDoc("{'attr1':$, 'attr2':$, 'attr3':$}", jsonResult, docID, tranLevel2);
 
			db->rollbackTran(tranLevel2);
		}//=====================================================================
 
		 //in doc 1 attribute {'attr1':'Lev1'}, other two were rollbacked
		db->getPartDoc("{'attr1':$, 'attr2':$, 'attr3':$}", jsonResult, docID, tranLevel1);
 
		//outrside tran document found nothing
		db->getPartDoc("{'attr1':$, 'attr2':$, 'attr3':$}", jsonResult, docID, 0);
 
		//commit tran level 1
		db->commitTran(tranLevel1);
 
	}//=====================================================================
 
	 //in doc 1 attribute {'attr1':'Lev1'}
	db->getPartDoc("{'attr1':$, 'attr2':$, 'attr3':$}", jsonResult, docID, 0);
}
8 апр 16, 18:45    [19034661]     Ответить | Цитировать Сообщить модератору
 Re: В рамках импортозамещения предлагаю обсудить новую базу (Днипра)  [new]
stop
Member [заблокирован]

Откуда: blog.pikosec.com
Сообщений: 405
Портировал сервер под Линукс.
Теперь доступно с обоих ОСей. Под Линукс правда клиентов нет толкового, только урезаный Джавай клиент,
но можно поиграться в конскольке, повыполнять запросы.
11 апр 16, 23:38    [19045043]     Ответить | Цитировать Сообщить модератору
 Re: В рамках импортозамещения предлагаю обсудить новую базу (Днипра)  [new]
Владимир2012
Member [заблокирован]

Откуда:
Сообщений: 1460
stop
Портировал сервер под Линукс.

Вот неплохо бы hub с examples завести /с готовыми проектами под Visual Studio 2013 community/.
Как по мне, то "на посмотреть" желающих было бы много больше.
А там смотришь и использовать начнут ...
12 апр 16, 09:29    [19045543]     Ответить | Цитировать Сообщить модератору
 Re: В рамках импортозамещения предлагаю обсудить новую базу (Днипра)  [new]
stop
Member [заблокирован]

Откуда: blog.pikosec.com
Сообщений: 405
Есть такие проекты в специальном репозитории.
Там сейчас один проект, но вообще их уже три, просто остальные не выложены.
Цель их - дать шаблон на типовые задачи и показать качество (размер, понятность) кода.
12 апр 16, 12:55    [19046776]     Ответить | Цитировать Сообщить модератору
 Re: В рамках импортозамещения предлагаю обсудить новую базу (Днипра)  [new]
stop
Member [заблокирован]

Откуда: blog.pikosec.com
Сообщений: 405
Там в MVC немного намешано кода.
По сути, вся бизнесс логика Форума (очень похожего на этот) заключена в этих четырех контроллерах.

https://github.com/Bazist/DniproExamples/tree/master/DniproForum/DniproForum/Controllers
12 апр 16, 12:57    [19046794]     Ответить | Цитировать Сообщить модератору
 Re: В рамках импортозамещения предлагаю обсудить новую базу (Днипра)  [new]
skyANA
Member

Откуда: Зеленоград
Сообщений: 28355
Гы...
public ActionResult send(Article a)
{
    a.Validate();

    a.ID = db.GetAll().Count() + 1;

А сама Днипра может сгенерировать идентификатор? :)
12 апр 16, 13:07    [19046840]     Ответить | Цитировать Сообщить модератору
 Re: В рамках импортозамещения предлагаю обсудить новую базу (Днипра)  [new]
stop
Member [заблокирован]

Откуда: blog.pikosec.com
Сообщений: 405
skyANA
Гы...
public ActionResult send(Article a)
{
    a.Validate();

    a.ID = db.GetAll().Count() + 1;

А сама Днипра может сгенерировать идентификатор? :)


А Монго может ?
Кромето того что бесполезный Guid
12 апр 16, 13:49    [19047142]     Ответить | Цитировать Сообщить модератору
 Re: В рамках импортозамещения предлагаю обсудить новую базу (Днипра)  [new]
stop
Member [заблокирован]

Откуда: blog.pikosec.com
Сообщений: 405
Да, этот пример давно писали.
От Ид конечноже можно избавиться. Каждый добавленный документ в базу имеет свой ИД
автоматически.

Спасибо за замечание, будет время, перепишу и сделаю код еще более коротким
12 апр 16, 13:55    [19047201]     Ответить | Цитировать Сообщить модератору
 Re: В рамках импортозамещения предлагаю обсудить новую базу (Днипра)  [new]
skyANA
Member

Откуда: Зеленоград
Сообщений: 28355
stop
skyANA
Гы...
public ActionResult send(Article a)
{
    a.Validate();

    a.ID = db.GetAll().Count() + 1;

А сама Днипра может сгенерировать идентификатор? :)


А Монго может ?

ObjectId
12 апр 16, 23:57    [19049939]     Ответить | Цитировать Сообщить модератору
 Re: В рамках импортозамещения предлагаю обсудить новую базу (Днипра)  [new]
stop
Member [заблокирован]

Откуда: blog.pikosec.com
Сообщений: 405
Добавил еще один минипроект, в коллекцию примеров использования этой СУБД в рамках тестирования
каскадных транзакций.

Минипроект моделирует форму сохранения конфигурации настроек.
1. Мапит все три формы на один большой документ и сохраняет его в базу.
2. Позволяет каскадно редактировать каждую настройку. Тоесть клацнули, открылась дочерняя форма, снова клацнули снова открылась дочерняя форма. Вся логика на всех формах с ОК\Отмена сохранена.
3. Позволяет очень просто расширять код. Если на форме появится еще десять контролов, то код почти не выростит по обьему.
4. При добавлении новой дочерней формы - обычный копипаст. Лезть в дебри парент формы и чтото там разбираться и прописывать дополнительно, не нужно.
5. Работает быстро, кода мало, код сам по себе очень простой.

Иходники
https://github.com/Bazist/DniproExamples/blob/master/ConfigScreenOnCascadeTran/ConfigScreenOnCascadeTran/MainForm.cs
https://github.com/Bazist/DniproExamples/blob/master/ConfigScreenOnCascadeTran/ConfigScreenOnCascadeTran/ChildForm.cs
https://github.com/Bazist/DniproExamples/blob/master/ConfigScreenOnCascadeTran/ConfigScreenOnCascadeTran/SubChildForm.cs
15 апр 16, 01:06    [19059333]     Ответить | Цитировать Сообщить модератору
 Re: В рамках импортозамещения предлагаю обсудить новую базу (Днипра)  [new]
skyANA
Member

Откуда: Зеленоград
Сообщений: 28355
stop
Добавил еще один минипроект, в коллекцию примеров использования этой СУБД в рамках тестирования
каскадных транзакций.

Минипроект моделирует форму сохранения конфигурации настроек.
1. Мапит все три формы на один большой документ и сохраняет его в базу.
2. Позволяет каскадно редактировать каждую настройку. Тоесть клацнули, открылась дочерняя форма, снова клацнули снова открылась дочерняя форма. Вся логика на всех формах с ОК\Отмена сохранена.
3. Позволяет очень просто расширять код. Если на форме появится еще десять контролов, то код почти не выростит по обьему.
4. При добавлении новой дочерней формы - обычный копипаст. Лезть в дебри парент формы и чтото там разбираться и прописывать дополнительно, не нужно.
5. Работает быстро, кода мало, код сам по себе очень простой.

Иходники
https://github.com/Bazist/DniproExamples/blob/master/ConfigScreenOnCascadeTran/ConfigScreenOnCascadeTran/MainForm.cs
https://github.com/Bazist/DniproExamples/blob/master/ConfigScreenOnCascadeTran/ConfigScreenOnCascadeTran/ChildForm.cs
https://github.com/Bazist/DniproExamples/blob/master/ConfigScreenOnCascadeTran/ConfigScreenOnCascadeTran/SubChildForm.cs

А при чём тут СУБД и какие-то каскадные транзакции?
15 апр 16, 09:30    [19059953]     Ответить | Цитировать Сообщить модератору
 Re: В рамках импортозамещения предлагаю обсудить новую базу (Днипра)  [new]
skyANA
Member

Откуда: Зеленоград
Сообщений: 28355
Посмотрел код... Это зло :)
15 апр 16, 09:39    [19060014]     Ответить | Цитировать Сообщить модератору
 Re: В рамках импортозамещения предлагаю обсудить новую базу (Днипра)  [new]
SergSuper
Member

Откуда: SPb
Сообщений: 5488
skyANA
Посмотрел код... Это зло :)
Вы если такое пишите, то какие-то обоснования приводите, иначе как-то гаденько выглядит
15 апр 16, 10:28    [19060324]     Ответить | Цитировать Сообщить модератору
 Re: В рамках импортозамещения предлагаю обсудить новую базу (Днипра)  [new]
Владимир2012
Member [заблокирован]

Откуда:
Сообщений: 1460
stop
Добавил еще один минипроект, в коллекцию примеров использования этой СУБД в рамках тестирования
каскадных транзакций.

Рад за вас.
Надеюсь вас уговаривать не нужно, что вы на правильном пути и делаете хороший framework?
/но работы у вас еще "не початый край"/

С Богом!
15 апр 16, 11:12    [19060639]     Ответить | Цитировать Сообщить модератору
 Re: В рамках импортозамещения предлагаю обсудить новую базу (Днипра)  [new]
stop
Member [заблокирован]

Откуда: blog.pikosec.com
Сообщений: 405
skyANA
А при чём тут СУБД и какие-то каскадные транзакции?


Так вы код вообще смотрели ?
Или это была оценка авансом.

Впринципе, код ничего сложного не делает. Но он легко расширяем, функционален и его логика максимально прозрачна.

Картинка с другого сайта.

В основе кода лежит один (большой) JSON документ который хранит настройки системы.
Он хранится в базе данных. Точней при открытии формы его там даже нет, приложение само его создает
и обновляет (добавляет новые аттрибуты).

Его вид
{'type':'config', 'confVal1':'value', 'confVal2':'value', 'confVal3':'value', 'confVal4':'value' }


Дальше чтобы редактировать этот документ из приложения, открывается форма, с которой открывается еще одна, потом еще одна.
Как на скрине. Все они редактируют свою часть JSON документа. Для этого редактирование каждой подчасти документа, происходит в отдельной, вложеной транзакции. На каждой кнопке Коммит или Роллбек, что позволяет выдержать следующую логику:
Если на дочерних формах нажата кнопка ОК, а на родительской Cancel то изменения не сохраняются.

Этот код просто показывает шаблон проектирования на основе интерактивной, каскадной транзакции.
Его плюс, он не требует реализации дополнительных контейнеров по шаблону Memento (Хранитель) или использование биндингов.
Он также показывает один из главных принципов SOLID, когда мы добавляем новую дочернюю форму, нам абсолютно ничего не нужно менять в родительских, более глубоких слоях приложения. Эта форма просто берет на себя ответственность редактировать определенную вложеную часть нашего JSON документа.

Ну и наконец, он работает быстрее, даже не за счет базы данных, а за счет того, что данные мы загружаем в базу данных порциями. Допустим у нас на дочерней форме нужно грузить фотографии в конф скрине. Мы их загружаем по одной в транзакции, а не скопом на финальной стадии.
15 апр 16, 11:47    [19060958]     Ответить | Цитировать Сообщить модератору
 Re: В рамках импортозамещения предлагаю обсудить новую базу (Днипра)  [new]
stop
Member [заблокирован]

Откуда: blog.pikosec.com
Сообщений: 405
Кстате еще вскользь пробегусь по SOLID архитектуре.
Почему код Днипры полностью отвечает SOLID, а другой код - нет или нужно хорошо постараться довести его до этого.

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

Single Responsibility - Каждая дочерняя форма редактирует свою маленькую часть Джисон документа. Чаилд ответственен только за редактирование этой части документа и не лезет не в слои выше себя, не в слои ниже себя в иерахическом документе.

Open/Closed principle - Каждая форма любого уровня открыта для расширения, но закрыта для изменения. Если нам нужно редактировать вложеную сущность, мы просто добавлем копипастом новый чаилд и он на себя берет часть ответственности за редактирование маленькой части Джисон документа уровня выше.

Liskov substitution - Принцип, когда парент форма коммитит данные она абсолютно не знает какая глубина дочерних форм была открыта и изменена. Она просто коммитит изменения. Фрактально и рекурсивно.

Interface segregation - В коде вы не увидите множество разных функций. Все поделено на максимально простые методы, эти методы похожи друг на друга и каждая форма может их использовать по своему усмотрению.
Интерфейсы максимально раздроблемы на маленькие части.

Dependency inversion principle - И наконец инверсия зависимостей. Вы редактируете или добавляете новую дочернюю форму при этом родительская форма абсолютно никак не меняется. Нижний слой не зависит от верхних слоев.
Если в вашем Мементо или другом контейнере родительская форма берет на себя обязаность сохранять изменения своих чаилдов - то вы явно можете пролететь с СОЛИДом. В сложном приложении это означает, что при добавлении маленькой пимпачки прийдется лезть в древний и тяжелый код нижних слоев, который может быть поломан и распространить ошибки на другие свои ветки.
15 апр 16, 12:40    [19061434]     Ответить | Цитировать Сообщить модератору
 Re: В рамках импортозамещения предлагаю обсудить новую базу (Днипра)  [new]
skyANA
Member

Откуда: Зеленоград
Сообщений: 28355
SergSuper
skyANA
Посмотрел код... Это зло :)
Вы если такое пишите, то какие-то обоснования приводите, иначе как-то гаденько выглядит

Я посмотрел код и высказал своё мнение о нем в двух словах.

Обоснуйте, что же тут гаденько? :) Вы код смотрели, что о нем думаете?
16 апр 16, 11:04    [19065802]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 4 5 [6] 7 8 9 10 .. 13   вперед  Ctrl
Все форумы / Сравнение СУБД Ответить