ThinkStage Conference — 30+ speakers about BA, Product, UX. Regular price ends May, 24.
×Закрыть

Database актуальные варианты

На текущий момент используется связка EF + SQLExpress для сбора данных о температурах и состоянии датчиков и реле.

Есть
1. сервис который опрашивает датчики, управляет реле и пишет это в БД.
2. сайт на ASP .NET MVC + Angular который показывает и управляет сервисом.

Хочу перенести на планшет или stickPC с Windows 10.

В SQLExpress смущает не убъет ли он флеш память самостоятельными операциям обслуживания. Поэтому раздумываю о смене движка БД.

Думаю подойдет и JsonDB.
Важно чтобы
а) одновременный доступ из разного ПО
б) есть клиент под .NET с сериализацией/маппингом в модели
в) очень бы хотелось запросы через linq или похожий (не прямыми текстовыми запросами)

Что стоит посмотреть?

LinkedIn
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Я подібне (запис датчиків в базу) зробив на основі FirebirdSQL.
ПлейнС код читає датчик і робить http post
Мікросервер на bananaPi за 30 доларів
Спочатку було на sqlite, але коли база стала декілька гіг, стало адськи гальмувати.
EF для такого, як на мене, дикий оверхед.

FirebirdSQL
Если не изменяет память, то эта самая firebird стоит в бортовых компьютерах абрамсов.

Думаю, там давній предок, якийсь Interbase 4.0

Начебто на гігабайтних об’ємах sqlite не мала б гальмувати...

Ну на маленьких вибірках (година-день-тиждень) все добре (швидше за Firebird), але коли вибирав за рік то займало до хвилини й більше.

SQLExpress смущает не убъет ли он флеш память самостоятельными операциям обслуживания
ее убьет винда

Всех благодарю.

В целом интересен mongodb как небольшой по размеру так и в качестве нового опыта.

PostgtreSQL — не думаю что он лучше текущего SQLExpress, но перейти на него судя по всему совсем просто (поддерживает EF).

Дело хозяйское, но помни сто в монге у тебя не будет acid в общем случае

и реляций что некоторым критично

Поработал с MongoDB, остались довольно приятные впечатления. Предыдущие проекты увязаны под MySQL, это связано исключительно с тем, что раньше не было толковой NoSQL базы, так бы вёл под монгу. Особенно весело было в SQL-based делать серилизацию объектов со сложной произвольной структурой, в то время как в NoSQL можно просто сохранять как есть.

При желании всегда можно в тот же json сериализовать и в базу сунуть. Нахера — другой вопрос

Ну почти так, только тогда был xml. Другой вопрос — как потом эффективно искать по отдельно взятым полям серилизованного объекта, даже например в логах по параметрам.

www.postgresql.org/...static/datatype-json.html
вот пример:
SELECT jdoc->’guid’, jdoc->’name’ FROM api WHERE jdoc @> ’{"company“: “Magnafone”}’;

Логи часто структурированы и nosql получается как зайцу пятая нога

Логі бувають різні. Тупняк може й можна зберігати в структурованому вигляді, а от більш складні логи — наврядчи. Наприклад


Користувач admin змінив ім’я користувачу user1 з «Я адмін» на «Я не адмін»
Користувач admin встановив користувачу user1 привілеї «Звичайний користувач», «Користувач із можливістю коригування даних» та зняв привілеї «Надзвичайний користувач»

Согласен. Но этот пример не особо показателен. Плюс тот же splunk и иже с ними, хоть и использует nosql в качестве хранилища, но приводит их к табличному виду.

То вже особливості мислення розробника. Перехід із реляційної моделі до документної зазвичай дуже важко дається людям.

Ничего там сложного нет. Просто не всегда есть в этом смысл.

а потом внезапно потребуется транзакционно изменить 2 документа из разных коллекций и вечер перестанет быть томным а аббревиатуры BASE/ACID — не просто набором английских букв. :)

Надо же, с десяток моих постов не прошли похоже зря. Ты открыл для себя что внезапно в документалках ACID и транзакционнось важна практически также как в реляционках. Неужели и CAP теорему, ее суть, стал понимать ?

Интересно что они в 2013 с MySQL как раз свичнулись на Postgre :) а в этом году вернулись обратно www.yumpu.com/...-from-mysql-to-postgresql

sqlite, работает с ef, но какие то косяки были.

как там кстати проект поживает?

Ну как видишь плохо поддерживают национального виробника.
Не смотря на явные приимущества перед тем же Монго ( ACID, транзакции, скорость работы, простая ОРМ) народ тяготеет больше к западным разработкам.
Основной их аргумент — популярность, комьюнити.

Пробовал я DniproDB
1. Она не пишет в файл, после остановки сервера все пропадает.
2. Писал вам вопросы — без ответа.
Вот чтобы мне было интересно
1. .NET Core совместимость
2. Embedded mode
3. Expressions вместо string
4. схожесть с EF
а) объекты были типизированы
б) хранились в раздельных «Таблицах»
в) можно включать (.Include()) необходимые поля

Основной аргумент
а) для личных проектов — работоспособность и удобства.
б) что решил заказчик

Пробовал я DniproDB
1. Она не пишет в файл, после остановки сервера все пропадает.

Очень странно, разве что какаято очень старая версия.


2. Писал вам вопросы — без ответа.

Хм, сейчас попробую проверить ящик.
Если что, я всегда доступен по скайп vyacheslavm81, так будет оперативней.


Вот чтобы мне было интересно
1. .NET Core совместимость

Есть.


2. Embedded mode

Можно сделать.


3. Expressions вместо string

Есть.


4. схожесть с EF
а) объекты были типизированы

б) хранились в раздельных «Таблицах»

Есть, разные коллекции.


в) можно включать (.Include()) необходимые поля

Есть, schemaless. Добавление или вставка нового поля\элемента в документ любых размеров очень легковесная операция.


Основной аргумент
а) для личных проектов — работоспособность и удобства.
б) что решил заказчик

Обращайтесь, если что, вот этот топик еще в силе.
dou.ua/forums/topic/17641

Не смотря на явные приимущества перед тем же Монго
Галантерейщик и кардинал!

Может ты имел ввиду галерщик и кардинал ?

Я имею в виду то что имею в виду — смешно сравнивать одну из самых продвинутых документоориентированных бд и наколенную поделку :)

А где в продвинутой базе транзакции и АСИД.
И почему движок продвинутой базы данных уже неоднократно переписан ?

Впрочем, я вспомнил кинотворчество Епам и понял, что собственно дискутировать тут нескем. Удачи в сьемках !

А где в продвинутой базе транзакции и АСИД.
Гугли CAP theorem. В школу в общем. И да, вторая попытка перехода на личности — слив засчитан :)

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

Впрочем, дело конечно не в том что есть продукт у нас УЖЕ лучше во всем. Конечно утверждать это глупо. Днипра хуже Монги в общем случае, потому что это молодой проект. Другой вопрос что из-за вот таких хуторянских архитекторов в киностудиях у нас, возможно, никогда не появятся действительно продукты с мировым именем. И тотже северный сосед будет тыкать нас яндексом, касперским, джет бреинсом, да чем угодно. А мы будем, вечным аутсорсом.

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

Но в большинстве кейсов, бизнесу хватает одной ноды для хостинга одной базы данных.
Я же тебе прямым текстом сказал — в школу, а ты полный лол постишь. Если коротко — то пожалуй главный драйвер бурного развития nosql — одной ноды недостаточно и и требуется горизонтально масштабировать базы данных. Именно для этого и создавались монги, кассандры и прочие редисы с коучдб, именно поэтому сознательно нигде нет ACID и вместо него придумали BASE. И печально что люди, претендующие на создание мировых продуктов не знают и не понимают простейших теоретических основ.
И тотже северный сосед будет тыкать нас яндексом, касперским, джет бреинсом
У тебя еще и географический кретинизм — северный сосед будет тыкать нас епамом, WoT, Viber-ом и так далее.
Если коротко — то пожалуй главный драйвер бурного развития nosql — одной ноды недостаточно и и требуется горизонтально масштабировать базы данных.

В школу пожалуй тебя нужно. Ибо для «архитектора» путать фундаментальные вещи и соотношения между ними, это пожалуй смертельно для проекта.
Так вот, поддержка транзакционности и ACID к горизонтальному масштабированию — не имеет совершенно никакого отношения.
Как документоориентированные так и реляционные базы данных могут иметь честную транзакакционность и ACID.

епамом

Да. творчество Епам, вне конкуренции !

поддержка транзакционности и ACID и горизонтальному масштабированию — не имеет совершенно никакого отношения
Спасибо, посмеялся от души.
Я все таки сделаю еще одну попытку и предложу тебе погуглить, что означают буковки A&С в аббревиатуре ACID и что означают буковки C&P в аббревиатуре CAP.

Смешались люди кони.
Ок. CAP гарантирует что если у нас много нод у нас есть CA или CP или AP.
Вопрос #1:
Какие буквы (ок, в распределенной архитектуре) поддерживает Mongo из ACID пускай даже учитывая CAP.
Вопрос #2:
Какая фундаментальная проблема (ты ведь о них говоришь?) запрещает разработчикам Монго добавить транзакционность и ACID в общем случае, хотябы на уровне одной ноды.

In Part II, we will move from data stored on one machine to data that is distributed across multiple machines. This is often necessary for scalability, but brings with it a variety of unique challenges. We’ll first discuss replication (Chapter 5), partitioning/sharding (Chapter 6), and transactions (Chapter 7). We will then go into more detail on the problems with distributed systems (Chapter 8) and what it means to achieve consistency and consensus in a distributed system (Chapter 9).
Тебе всю вторую часть сюда скопипастить или достаточно разделов 8-9?

Мне ответь на два вопроса выше. Это проиллюстрирует именно твое понимание данной тематики, ее суть.
Книженции можешь оставить для HRов и их помощников.

Ну и когда ты наконец разберешся в проблематике, то пожалуй сможешь ответить для себя на вопрос. Почему в высоконагруженных (и распределенных) финансовых системах, Монго до сих пор отводят роль максимум хранения логов.

Книженции можешь оставить для HRов и их помощников.
Ну это уже чересчур толсто :)

Это ты прав, теряю квалификацию. Давай продолжим порку потоньше, в этот скучный пасмурный день.

Возьмем классическую базу данных, с хранением и редактированием информации о пользователях. В реляционной модели, это скорей всего была бы одна таблица User с множеством связей к ней из других таблиц. И ты правильно заметил, что основной драйвер развития noSQL баз данных — это возможности горизонтального масштабирования одной и тойже базы данных.
Вот мы берем эту базу данных и горизонтально канонично масштабируем по принципам shared nothing. Допустим все юзеры из Европы и Азии у нас будут теперь на ноде A. Все юзеры из Америки, Африки и Австралии будут теперь на ноде B.
Теперь вопросы.
1. Почему такая правильно горизонтально промасштаблированая база не может поддерживать по твоему ACID ?
2. Почему не может поддерживать транзакции ?
3. Причем тут вообще теорема CAP в общем случае ?

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

3. Причем тут вообще теорема CAP в общем случае ?
CAP теорема причем к любой распределенной(не распределенная — вырожденный случай) системе хранения-модификации данных. Соотвественно она причем в твоем примере. Давай рассмотрим по буквам.
Consistency — скорее да чем нет. Точней да для сценариев когда изменяется один пользователь. Или пользователи попавшие на один шард. Нет — если надо изменять пользователей с разных шардов. Надо смотреть сценарии использования, но проблема скорей возникнет чем нет. И это ответ на твои вопросы 1-2.
Availability — fail. Если сервер умер — то все имеющиеся на нем данные недоступны. Если умер конфиг сервер — то недоступен весь кластер. Можно ли улучшить ситуацию — можно, достаточно сделать репликацию и мониторинг с автоматической заменой. Но тут у нас внезапно начинает страдать конситенси — сетевые транзакции между мастером и репликой штука сложная и ненадежная, в стандартной схеме(двухфазный коммит) нужен координатор который становится «single point of failure». К слову в нормальных nosqldb эта проблема решается заменой двухфазного коммита на реализацию алгоритма паксос. Можно конечно реплицировать с небольшой задержкой — но получается что данные на реплике и мастере могут иметь расхождение и я упомяну что это такой себе вариант eventual consistency.
Partition tolerance — скорее фейл чем нет. Обрыв соединения приводит к отказу системы или части системы. Можно конечно улучшить ситуацию мониторингом и репликацией, как я описывал выше — но тут тоже все становится интересным. Допустим кластер окажется «распиленным напополам» — какую половину считать «доступной», а какую — нет? Тут мы приходим к понятию кворума, но об этом уже самостоятельно — и так многобуков получилось.
Резюмируя сей длинный пост, скажу что в частном случае можно получить ACID для шардов, пожертвовав при этом availability&partition tolerance. Но обычно реальность сложней и интересней(допустим тебе надо хранить у пользователей линки на их друзей — других пользователей).
Ну в заключении хочу сказать что это фактическая схема работы монги — ограниченная транзакционность для документа, шардирование, репликация, кворумы и eventual consistensy. Только там сложней, интересней, ближе к реальности и в разы надежней.
Так то, мой вопрошающий падаван. :)

Чудо Юдо. Если на собеседовании приходит кадр, и вместо того чтобы ответить на вопросы начинает цитировать абзацы с википедии общего характера, то как минимум это вызывает вопросы о понимает ли чел о том что говорит.

Особенно когда десятки килобайт мыльных знаний снабжены гуманитарными эпитетами «скорее чем». Короче два балла, конечно википедия мне не интересно. А вот с человеком который не уходит от сути замыливая гепы, то всегда пожалуйста.

Ну давай вот совсем сузим вопрос.
Ну чтоб совсем было тебе просто ответить и википедия тебе не лезла в голову. Когда всетаки в Монго добавят транзакции и полную поддержку ACID это будет всетаки зрада или перемога ?

скучно, попробуй еще раз :)

Когда в Епаме скучно, они кино снимают.

Хм, за лесом цитат из вики не заметил очередное занимательное творчество.

Резюмируя сей длинный пост, скажу что в частном случае можно получить ACID для шардов, пожертвовав при этом availability&partition tolerance. Но обычно реальность сложней и интересней(допустим тебе надо хранить у пользователей линки на их друзей — других пользователей).

Тут конечно вывод простой — CAP теорему ты не знаешь.
Ибо для горизонтального мастшабирования по принципу shared nothing и availability & partition tolerance будут не нарушены от слова совсем. Будет нарушена только для тех нод, которые легли, но CAP как раз говорит о поведении системы в целом, что не имеет смысла при shared nothing. Поэтому ACID для таких систем есть хорошо в любом случае. Но ты этого избегаешь признать, бо уже успел нагородить книжной ереси. Прежде чем заучивать наизусть, нужно было чуток подумать.

Эта попытка получчи. Фигурная резьба по цитатам — одобряю :)

Consistency — скорее да чем нет. Точней да для сценариев когда изменяется один пользователь. Или пользователи попавшие на один шард. Нет — если надо изменять пользователей с разных шардов. Надо смотреть сценарии использования, но проблема скорей возникнет чем нет.
.....
Но обычно реальность сложней и интересней(допустим тебе надо хранить у пользователей линки на их друзей — других пользователей).
(попкорн)

Опять пациент путается в показаниях.
Я говорил на счет твоего глупого утверждения

в частном случае можно получить ACID для шардов, пожертвовав при этом availability&partition tolerance

А ты свою цитату привел с

Consistency

Ну походу ты в терминах путаешся, потому не видишь разницы между ними.

спасибо, пасмиялси :)

Если на собеседовании приходит кадр,
ну вот просто интересно имя конторы :)

Сверху же написано. БубенКом — разработка поисковых систем с нуля, транзакционных движков баз данных, поисковые алгоритмы.

Еще по теме, вот сегодня интересная статья на хабре
habrahabr.ru/company/hpe/blog/310702

Ключевые моменты, СУБД Вертика.
1. Полная поддержка ACID
2. Горизонтальное масштабирование и массивная параллельная обработка данных
3. Кастомеры, напр. Фейсбук с купленными лицензиями на 20 петабайт.

Вот это серьезный подход и к транзакционности и к масштабированию и надежности хранения данных.
Не такой как у Монго-братии.

PS: Не зачем смайлики в каждом сообщении, смех без причины — сам понимаешь.

Сверху же написано. БубенКом — разработка поисковых систем с нуля, транзакционных движков баз данных, поисковые алгоритмы.
ООО «Рога и копыта», nuff said

Ну да, до ebanot it еще не доросли.

О нет, только не это. Развидеть бы Vertica/Volt.
Это очень нишевые СУБД. Начинать работу с ними надо с чтения HW Spec. Совершенно бесполезные вещи в проектах с БД меньше 1 Тб (IMHO), не оправдывают себя по критерию сопровождение/эффективность.

Oleksiy Antonov, а почему считаете что бесполезные? И в чем смысл их использования на больших объемах данных?

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

Ну я слышал наоборот хорошие отзывы на средних объемах. РСУБД как хранилище, а вертика как инструмент для всяких агрегаций. Как работает загрузка-выгрузка, не знаю, не вдавался в подробности.

Вертика вообщето реляционная аналитическая база, не думаю что сравнение с монго имеет смысл впринципе

Тут важно не терять контекст в котором сравнивались базы. А именно оба эти решения (Монго и Вертика) рассчитаны на горизонтальное масштабирование и параллельный процессинг данных. И если Вертика вполне себе реализуе транзакционнось и АСИД, то в Монго комьюнити почемуто любят прикрываться BASE и CAPами. У первых — серьезный подход. У вторых — скажем так, нужно опять переписывать движок.

это такой толстый троллинг, или ты действительно не понимаешь разницы между olap & oltp?

Разница между ними конечно есть. Но опять же, если отойти от книжек и взглянуть на рабочие базы, то 100% olap или 100% oltp встречаются крайне редко. В основном это базы гибриды. И когда ты хочешь записать Вертику в чистый Olap а Монго в чистый Oltp, то ты мягко говоря людей вводишь в заблуждение.

я хочу сказать что монгу писали как oltp систему для широкого спектра вариантов использования, в том числе немножко аналитики. Вертику же задумали как olap систему, заточенную под небольшое количество юзкейсов, но для очень больших обьемов данных; ограничения начинаются со специфического железа.
Они попросту для разного придуманы, и соотвественно по разному спроектированы и заимплеменчены. И поэтому сравнивать их — это либо толстезный троленх, либо дремучее невежество. И мне временами любопытно, сколько % в твоих постах первого, а сколько второго.

я хочу сказать что монгу писали как oltp

OLTP расшифровывается как Online Transaction Processing.
Поскольку в Монго нет как таковых транзакций, кроме тех двухфазных недоразумений, то к полноценному OLTP ее причислять нельзя.
Еще забавней становится, что на самом деле чистый OLAP мог бы себе позволить скипнуть транзакции для него это не так критично, но Вертика реализовывает. Вопрос почему — тебе домашнее задание на завтра.

Не, с тобой определенно весело, давай потыкаю тебя в мокренькое
— слово Transaction в OLTP обычно переводится как «бизнес транзакция», что совершенно не эквивалентно ACID транзакциям.
— в mongodb есть почти полноценные acid транзакции при условии изменения одного документа — если твой любимый подход «share nothing» можно применить в поставленной задаче, то в монге почти ACID транзакционность из коробки, прикинь а :)
— двухфазный коммит — канечна костыль, но есть и другие способы симитировать ACID дял произвольного сценария
Ты упорно продолжаешь сравнивать пассатижи с трубным ключем. С нетерпением жду новых откровений.


— слово Transaction в OLTP обычно переводится как «бизнес транзакция», что совершенно не эквивалентно ACID транзакциям.

Нет, я настаиваю. В мире СУБД слово Транзакция имеет вполне определенное, недвусмысленное значение.

— в mongodb есть почти полноценные acid транзакции при условии изменения одного документа — если

Ооо ... это еще одна блыскуча перемога уникАльнои кАманды разработчиков Монго. Блочить весь документ целиком. Такое можно было позволить себе примерно в базах 80-х, сейчас каждая уважающая себя база данных максимально гранулярно относится к блокировкам. В реляционках это лок на уровене строки в таблице, в Днипре это лок на атрибуте документа.


твой любимый подход «share nothing» можно применить в поставленной задаче, то в монге почти ACID

Почему же у тебя так плавают знания то ? Понятие «shared nothing» относится к горизонтальному масштабированию и нодам которые практически не шарят данные в транзакциях. Сейчас мы говорим о транзакционных изменениях данных (в нескольких документах) и ACID на одной ноде.


транзакционность из коробки, прикинь а :)

Для пара-архитекторов на пара-сооевнованиях, развечто.

— двухфазный коммит — канечна костыль, но есть и другие способы симитировать ACID дял произвольного сценария

На файловой системе с голым IO stream тоже можно многое чего симитировать. Но зачем ?

В мире СУБД слово Транзакция имеет вполне определенное, недвусмысленное значение.
tpc.org тебе канечна ни разу не авторитет :)
это еще одна блыскуча перемога уникАльнои кАманды разработчиков Монго.
твое мнение безусловно ценно для тебя самого, но факт наличия почти ACID в mongodb на уровне документа(по сути аналог row реляционок) ты признал. И то хорошо.
в Днипре это лок на атрибуте документа.
Подскажи, где можно ознакомиться с этим поделием — впереди длинные выходные, хочу повеселиться.
Понятие «shared nothing» относится к горизонтальному масштабированию и нодам которые практически не шарят данные в транзакциях.
Shared nothing означает.... shared nothing, а не
практически не шарят данные в транзакциях
А раз то шарить nothing, то транзакционность между разными документами не нужна.
ACID на одной ноде.
До слез.
Кому нужен ACID на одной ноде в общем случае? А что делать если обьем данных вырос и одна нода не может его эффективно процессить и надо разносить на разные ноды, забив на ACID?
tpc.org тебе канечна ни разу не авторитет :)

Ctrl+F по странице — упоминания Mongo нет.
Еще один Ctrl+F по странице Business Transaction тоже нет.
Что самое смешное, что такое набор tpc тестов ты не знаешь.
Это пузомерка для реляционных баз данных. NoSQL базы с сомнительными транзакциями вроде Монго, Мемкеш или Редис туда не пускают.

Подскажи, где можно ознакомиться с этим поделием — впереди длинные выходные, хочу повеселиться.

Начни с книжек.
github.com/Bazist/Books

До слез.Кому нужен ACID на одной ноде в общем случае? А что делать если обьем данных вырос и одна нода не может его эффективно процессить и надо разносить на разные ноды, забив на ACID?

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

Ctrl+F по странице — упоминания Mongo нет.
Еще один Ctrl+F по странице Business Transaction тоже нет.
давай я тебя еще раз мокну
www.tpc.org/...ons/pdf/tpc-c_v5.11.0.pdf
The performance metric reported by TPC-C is a «business throughput» measuring the number of orders processed per minute.
Начни с книжек.
тоесть кроме журнала мурзилка у тебя ничего нет — ожидаемо. Журнал кстате забавный, в разделе «архитектура», первая глава — «имплементация». Это прекрасно, чо.
Ключем может выступать географическое расположение пользователя, тип его учетной записи и тд. Когда координатор тебя отправляет на определенную связанную с тобой ноду, только там ты будешь транзакционно менять данные.
Я тебе второй раз повторяю, как хендлить ситуации когда после роста кол-ва данных(пользователей тех же) внезапно потребовалось разделение ноды. Вот к примеру у тебя географическое разделение и все европейцы были на одной ноде и обрабатывались транзакционно. Потом прошел удачный маркетинг в ЕС и нода перестала тянуть, надо выделить «германию» и «великобританию» на отдельные ноды. Как при этом сохранить ACID между немцами и итальянцами?
Контрольный вопрос: а что делать если координатор ляжет?
давай я тебя еще раз мокнуwww.tpc.org/...ons/pdf/tpc-c_v5.11.0.pdf
Ctrl+F по странице — упоминания Mongo нет.
Еще один Ctrl+F по странице Business Transaction тоже нет.

Еще раз, какое отношение Монго имеет к официальным тестам tpc ?

тоесть кроме журнала мурзилка у тебя ничего нет — ожидаемо. Журнал кстате забавный, в разделе «архитектура», первая глава — «имплементация». Это прекрасно, чо.

Не осилил ?

Я тебе второй раз повторяю, как хендлить ситуации когда после роста кол-ва данных(пользователей тех же) внезапно потребовалось разделение ноды. Вот к примеру у тебя географическое разделение и все немцы европейцы были на одной ноде и обрабатывались транзакционно. Потом прошел удачный маркетинг в ЕС и нода перестала тянуть, надо выделить «германию» и «великобританию» на отдельные ноды

Путаешь миграцию базы данных с ноды на ноду,
собственно с Online Transaction Processing. Это две разные вещи. Миграция это просто миграция. Это физическое перенесение данных с одной ноды на другую по какомуто критерию. В твоем случае, берутся все данные пользователей Германии и переносятся на отдельную ноду. Когда перенесли, пользователь из Германии работает только с этой нодой, по всем канонам транзакционности и ACID.

Контрольный вопрос: а что делать если координатор ляжет?

Ну ляжет и ляжет. Если лег координатор, это влияет только на Availability но не влияет на ACID каждой отдельной ноды.

Еще раз, какое отношение Монго имеет к официальным тестам tpc ?
Монго — никакое. Трактование термина «транзакция» в тереде обсуждения аббревиатуры OLTP — самое что ни наесть прямое. Именно в связи с этим я его упоминал. Попытка слива засчитана.
Не осилил ?
Да там асиливать нечего, уровень документации: школьная стенгазета. На первый попавшийся ляп я тебе ткнул уже, дальше лень.
Когда перенесли, пользователь из Германии работает только с этой нодой, по всем канонам транзакционности и ACID.
Пользователю из германии насрать на ноды, ACID и каноны транзакционности. Он хочет продолжать переводить переводить деньги(условно) своему знакомому итальянцу транзакционно, вне зависимости от того что там под капотом и как ты ноды поделил. И если твоя система позволяет такой финт на малом обьеме данных, а на большом говорит «ой, теперь я не могу в италию транзакционно, теперь тока по германии» — то это ни разу не масштабируемая система а кусок говна для данных юзкейсов. Отмечу что таких юзкейсов, связанных с резким ростом и перебалансированием нод — более чем дофига, выстреливают в каждом первом бизнес домене. И если твоя поделка не умеет с ними работать, то грош ей цена как «субд общего назначения».
Монго — никакое.

Что, с знаниями по tpc опять както невдобно получилось ?

Трактование термина «транзакция» в тереде обсуждения аббревиатуры OLTP — самое что ни наесть прямое.

Транзакция это транзакция. Как ты не понимаешь, что если под транзакцией не иметь ввиду атомарное изменение нескольких таблиц, то ты будешь мерять тупые вставки в одну единственную таблицу, которые ты называешь «бизнесс транзакция». Ну никто такое не меряет в tpc. Там серьезные тесты, например тест TCP-H моделирует движение товаров на складе.

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

Тебе бы более простые вещи осилить.

Пользователю из германии насрать на ноды, ACID и каноны транзакционности. Он хочет продолжать переводить переводить деньги(условно) своему знакомому итальянцу транзакционно, вне зависимости от того что там под капотом и как ты ноды поделил. И если твоя система позволяет такой финт на малом обьеме данных, а на большом говорит «ой, теперь я не могу в италию транзакционно, теперь тока по германии» — то это ни разу не масштабируемая система а кусок говна для данных юзкейсов. Отмечу что таких юзкейсов, связанных с резким ростом и перебалансированием нод — более чем дофига, выстреливают в каждом первом бизнес домене. И если твоя поделка не умеет с ними работать, то грош ей цена как «субд общего назначения».

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

И если твоя поделка не умеет с ними работать, то грош ей цена как «субд общего назначения».

Ты чтото опять напутал. Моя «поделка» как раз поддерживает на уровне ядра три вида транзакций (Repeatable Read, Snapshot, Read Commited), поддерживает все четыре буквы ACID и даже поддериживает честные каскадные транзакции с возможностью промежуточных коммитов и откатов. И поддерживает гранулярность блокировок на уровне атрибутов. Тоесть с одним доком может работать сразу несколько транзакций в отличии от.

Что, с знаниями по tpc опять както невдобно получилось ?
У тебя как раз неудобно получилось — я тебя потыкал мордой.
Транзакция это транзакция.
Линку я тебе выше запровайдил. Читай пока не дойдет.
Твоя святая наивность что можно перечислить деньги в пределах одной единственной базы данных — доставляет.
ИМХА, ты таки непроходимо туп Извини, но я до последнего надеялся что ты просто троль. пример с деньгами я привел исключительно для того чтобы проиллюстрировать немасштабируемость твоей поделки.
Но в реальной жизне случаи бывают разные — скажем перевод между своими счетами в одном банке — это зачастую операция в одной базе и в одной транзакции, но ет уже оффтоп.
Моя «поделка» как раз поддерживает на уровне ядра три вида транзакций
Твоя поделка умело сочетает все минусы реляционной и нереляционной модели. Ну и пару милых штрихов к портрету из «документации»:
Run DniproServer.exe console application As Administrator. The application opens 4477 port
for communication with client.
порты в конфиг? Не, не слышал! Сделать самоиснталирующийся сервис? Не, не в курсе!
Open your .NET solution and add
DniproClient.NET\DniproClient\bin\Releas
e\DniproClient.dll as reference to your project
Nuget? А шо ето такое!
Засим откланиваюсь, удачи в продвижении своей поделки.

А вот ето так вообще прекрасно иллюстрирует «прахвесийный ривэнь» :
папка github.com/....WIN/tree/master/Releases
с файлами:
DniproDB_v1_0_3.exe
DniproDB_v1_0_4.exe
DniproDB_v1_0_5.exe
о чем вообще можно говорить?

Соберись тряпка, ведешь себя как низкосортный DevOps. Неужели квалификации хватает максимум структуры папок покопать ?

да какая структура папок — скомпиленные бинарники в сорц контроле, я такое даже у студентов не видел :)))))

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

да, ты меня из себя вывел — я тут под столом рыдаю :)

Я тут почитал ваш дискуссионный клуб.

До слез.Кому нужен ACID на одной ноде в общем случае? А что делать если обьем данных вырос и одна нода не может его эффективно процессить и надо разносить на разные ноды, забив на ACID?
Я тебе второй раз повторяю, как хендлить ситуации когда после роста кол-ва данных(пользователей тех же) внезапно потребовалось разделение ноды. Вот к примеру у тебя географическое разделение и все европейцы были на одной ноде и обрабатывались транзакционно. Потом прошел удачный маркетинг в ЕС и нода перестала тянуть, надо выделить «германию» и «великобританию» на отдельные ноды.
я хочу сказать что монгу писали как oltp систему для широкого спектра вариантов использования, в том числе немножко аналитики.
WTF??)
Надеюсь, вы там платежные системы на монге не пишете еще?)

я наверное контекст сильно порезал: при условии шардинга бд на несколько нодов и негарантировании нахождения подмножества шардов на одном ноде, ACID на каждом отдельном ноде не нужен.

ACID на каждом отдельном ноде не нужен.

Ты бы хотябы разобрался что такое ACID.
Например буквочка D означает Durability. Если у тебя ее нет, то при обычном сбое hardware (electricity? ) при перезагрузке база будет в corrupted состоянии и сервер больше никогда не подымится с ней.

ты, я полагаю, читать разучился?

О нет, нет ! Неужели тебя опять не так поняли, ведь ты же имел ввиду совершенно не это, ну скорейже скорейже притяни нам еще копипасты с википедии чтобы прикрыть тот абсурд что ты тут несешь. Юный Орел с галеры ЕПАМвлского. Оказывается понимать некоторые фундаментальные вещи это несколько сложнее чем трясти задом перед камерой в окружении HR курочек.

Вот правда забавно:
я про ACID, который A+C+I+D — все вместе тоесть, все 4 гарантии. Ты же выдергиваешь D и кричишь «ааа вот ему durability не важно!!!111». Ну сам жеж подставляешься, клоун.
пользуясь случаем
я тут с твоего кода ухахатываюсь.
Такое писать в 2016 году, это просто песня. Исключения в плюсах уже более 20 лет. Функции из хидеров повыноси в cpp, инлайнинг не нужен пока профилер не покажет обратного.
пулы памяти написали уже 100500 раз, и каждый первых из популярных — кроет твое поделие как бык овцу.
RAII уже 100 лет в обед, а ты и не в курсе
маджик намберы константы вынеси
замени адресную арифметику итераторами где можно или хотябы локализируй в одном месте.
И наконец открой для себя boost.
ну в общим спасибо за хорошее настроение в течении дня.

Открою тебе секрет, там еще GoTo в коде немеряно. Не пытайся привести этот код к галерным стандартам. Он ровно такоеже мясо, какое можно найти в ядрах других популярных систем. Здесь все построено в угоду производительности, но в моем случае код еще максимально простой и концептуально на голову выше других подобных систем.
Если хочешь его улучшить — форк в руки и бенчмарки на встречу. А просто трепать языком не стоит. Не ты первый, не ты последний который сюда с шашкой забегает.

галерные стандарты, мухаха. Чего только говнокодеры не придумают чтобы свое криворукие оправдать. А, я знаю — следуещий аргумент «Этот Код Работает!!!», ггг.
Учись писать код, клоун.

«Этот Код Работает!!!»

Именно так. Он не просто работает, он полностью поддерживает транзакционную парадигму и в среднем топчет Монго в бенчмарках в 10-20 раз.
Если не поленишся, можешь запустить в консоле стандартный пакет бенчмарков просто набрав db.SelftTest(), ядро выполнит около 10 млн запросов менее чем за 30 секунд.

А вот ты — да. Клоун. Такой проект моменально бы запорол своими бустами, эксепшонами, итераторами, пулами с других библиотек и другим трешом. Потому мы за твоим авторством никогда и ничего ценного скорей всего не увидим.

саиое доставляющее в этой истории то, что мой кому-то нужег и он живет полноценный лайфсайкл. Его ежедневно используют тысячи(а то и десятуи тысяч) людей по всему миру; его дорабатывают, расширяют, тестируют высокооплачиваемые профессионалы и тд. Канечна же в среднем лет за 10-15 он устаревает и идет на покой.
А твой кусок говна никому не нужен. Это видно из статистики гитхаба. И никому никогда не будет нужен, сколько бы не пытался меня поддеть. :)

Можно ссылочку на твой гитхаб и проекты которые ты лично писал с нуля ?

самозашквар какой-то... как тебе в голову пришло оправдывать плохой код тем, что продукт работает и делает то, что должен? код плохой, продукт никому не нужный; то что быстрее монго клево, только выбирая из твоего и монго >99% выберут монго, зачем ты к этому всему выставляешь себя странным, мягко говоря, не понимаю

С чего ты взял что этот код плохой ?

то что ты выше пишешь очень характерный признак

Что именно пишешь ?
Этот код — он ахуенен. Он делает очень сложные вещи простым и черезвычайно эффективным способом.

То что у вас вызывают какието проблемы с его чтением или пониманием — это нормально. Залезь в сорцы тогоже .NET фреймворка и с удивлением обнаружишь что тот код будет тоже похож на этот.

твой код — говно. просто смирись. Могу порадовать: таких говнокодеров и говнокода я видел в товарных количествах. Самые сообразительные гдет за полгода переучивались писать не только «чтобы работало и быстро», но и еще понятно, поддерживаемо, расширяемо и тестируемо.

Клоун, этот код написано хорошо. Смирись.
Изначально задача ставилась просто индексировать документы через инвертированый индекс и Trie структуры. Когда код был отлажен и показал отличные результаты, я решил туда добавить транзакции. На это ушло 2 недели. Карл. Еще через 2 недели стали работать каскадные транзакции. Потом резолвы дедлоков. Потом джоины. Потом я сделал блоки на уровне атрибутов, а не документов. Ничего этого нет в Монго. Именно потому что как раз код Монго — говно. Да, может быть он более распространен и больше комьюнити, он более прилизан, но он говно по задумке и концепциям, что фатально. Первый признак говна — его тяжело модифицировать и поддерживать. В Монго не будет никогда добавлено многое из того что у меня уже реализовано, потому что для Монго это означает переписать движок с нуля. Но у меня не тот случай. Архитектура черезвычайно ахуенна, разделена аккуратно на лееры, аккуратно выделены мощные абстракции на которых сделать теже репликации, шардирование — черезвычайно просто. Что я и сделаю, как дойдут руки.

о как припекает :)

Что именно пишешь ?
?
Этот код — он ахуенен. Он делает очень сложные вещи простым и черезвычайно эффективным способом.
я не смотрел твой код, мне достаточно твоих реплик, чтобы понят что скорее всего у тебя там хрупкий монолитный кусок, в котором кроме тебя никто разобраться не сможет
Залезь в сорцы тогоже .NET фреймворка и с удивлением обнаружишь что тот код будет тоже похож на этот.
не на того напал, в сорцах фреймворка осталось мало того что я не видел, и там полно лютых мест, но не потому что так очень производительно и хорошо, а потому что разного уровня программисты пишут и как бы фреймворку много лет и до сих пор поддерживается и релизится, там, наверняка, приходилось лепить и не раз
я не смотрел твой код, мне достаточно твоих реплик, чтобы понят что скорее всего у тебя там хрупкий монолитный кусок, в котором кроме тебя никто разобраться не сможет

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

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

Нет, этот код также как у меня написан с большим количествем велосипедирования, но со знанием дела. С GoTo без разных левых оверхедов. Он написан единственным верным способом. По другому такое не пишут.
А код всетаки мой глянь, в нем конечно можно легко и просто разобраться. Откровенного треша там нет, а хитрые части достаточно хорошо продокументированы. Может быть я не поленюсь и специально курс лекций запишу как раз по Core

Ну знаешь ли, в трудах Перельмана тоже мало кто может разобраться, но это же не означает что его мат выкладки ацтой.
код пишется для людей и важно чтобы в нем легко можно было разобраться, твое сравнение не катит
Нет, этот код также как у меня написан с большим количествем велосипедирования, но со знанием дела. С GoTo без разных левых оверхедов. Он написан единственным верным способом. По другому такое не пишут.
не убедительно, ты же, поди, сам все писал и ни какой критике программа не подвергалась, ты ведь наверняка не какой-то общепризнанный эталон и единственно верным знанием, шанс набокопорить очень большой
А код всетаки мой глянь, в нем конечно можно легко и просто разобраться. Откровенного треша там нет, а хитрые части достаточно хорошо продокументированы.
без сылки это сложновато
Может быть я не поленюсь и специально курс лекций запишу как раз по Core
это окажется бесполезной тратой времени, никто же не будет смотреть кроме твоих друзей

github.com/...iproDB/DniproDB_query.cpp сначала подумал, что мне не повезло с файлом, открыл файлы рядом — они такие же, это говнокод в чистом виде, так дотнет не написан, так пишут студенты, ты на методах экономишь чтобы выиграть менее милисекунды на вызове тысячи методов? или вот эти магические числа, что ты ими выиграть собирался? или много операций в одной строчке, чтобы понять надо 5 минут на них смотреть и разбираться в очередности операторов? все очень плохо

Нет, это не говнокод.
Это достаточно простая абстракция которая состоит из нескольких интуитивно понятных методов.
getDocsAttr — получить список документов по атрибуту
updPartDoc — обновить часть документа
insPartDoc — добавить часть документа
getPartDoc — получить часть документа по шаблону
Да, внутри их стоят парсеры, которые парсят джисоны самой разной структуры, обрабатывают разные разноразмерные массивы и нарезают их на ключи. Но там все на месте. Этот код прекрасно отлаживается и дебажится. Ниже этой абстракции стоит Key\Value, выше этой абстракции стоит Expression который позволяет делать сложные квери.

Мне проще иметь в коде 4 простых метода, чем наплодить классов и неизбежно получить присест по производительности.

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

github.com/.../tree/master/DniproClient

И вся эта кухня чтобы получить вот такую прекрасную няшечку. 50 методов в реальном проекте на новой ORM

github.com/...ben/Booben/Helpers/DAL.cs

Так что каждому слою свой код.
Специфика ядра такова, что юниттестов там больше чем кода ядра, потому как не странно, но вот тот «студенческий» код содержит меньше всего багов.

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

Сначала разберись какие возможности этого самописаного сериализатора-десериализатора, потом делай выводы.

Он сериализцуует в json, делает это коряво, игнорирует стандарт ISO, а в случае с дотнетом — не кеширует информацию о типе, что приводит к постоянному дерганию рефлексии, что просаживает перфоманс. Я ничо не забыл?

Он сериализцуует в json, делает это коряво, игнорирует стандарт ISO,
И не должен, это внутренний язык запросов между ORM и базой данных, в общем случае. Сериализатор умеет работать с рекурсивными шаблонами и поддерживает целый список специальных команд (смотреть документацию)
с дотнетом — не кеширует информацию о типе

Сам дотнет эту информацию кеширует. Учи матчасть.

что просаживает перфоманс

Точно замерял ? То что я мерял, на 15% быстрее работал мой сериализатор чем стандартный сериализатор.

ничо не забыл?
Забыл для чего он был сделан. Причина его написания, у него действительно широкие возможности по прокси сериализации и десериализации обьектов. Например у тебя есть большой бизнесс обьект в коде, но ты не хочешь его весь сериализировать или десериализировать, а только его определенную часть, по заданому шаблону.
И вот сериализатор принимает три параметра в общем случае
Созданный обьект, Джисон шаблон части которая должна быть сериализирована/десериализирована, Идентификатор документа с котого эта секция будет вычитана/записана.

уверен, медленее на любом несинтетическом тесте.

Недавно была интересная задача. 30 гигабайт документов (логов) было проиндексировано за 20 минут. При средней длине слова в 8 символов это получается 3.7 миллиардов запросов было выполнено за 20 минут, или около 3 млн запросов к базе данных в секунду. Это синтетический тест, или не очень ?

сисиая синтетика: только индексирование никому не нужно.
Ну и я жду результатов монги(или ms sql ) при прочих равных.

Скорость вставки простых обьектов в БД
1. перепиши код на монго с использованием bulk insert
2. выставь правильно write concern.
3. возвращайся с новыми цифрами.
Но так канечна результаты впечатляют, в 10 раз быстрей, да :))

В тесте в обоих базах write concern совпадает и данные запихиваются батчем.
10 раз это еще мало, это можно сказать пожалели Монго.
Самый треш у Монго начнется, когда нужно проапдейтить или запихнуть атрибут (элемент в массив ?) внутрь документа. Ибо документ лежит в экстентах и все печально. В Монго это может привести к перезаписи документа, а в Днипре просто апдейт ключа в Key\Value и всё. Это наносекундная операция. Но я такие контр примеры уже не писал, дабы не растраивать поклонников карго культа Монго.

Для особо ранимых, кому не нравится мой код.
Исходники Microsoft .NET JIT мяско.
github.com/...eclr/search?utf8=✓&q=goto

По запросу GoTo найдено 543 (!) вхождения, Карл.
Говнокодеры ! Про ифы и вайлы ничего не знают.
Ну ничего, проверим их на Boost

github.com/...clr/search?utf8=✓&q=boost

Вот казлы, ничего не знают о гениальной библиотеке Boost.
Поди и пулы у них тоже самописные, не такой код как в Епаме, ой не такой.

и что это ты нашел?) регрессионные тесты? ну да тестировщики-автоматизаторы не очень программируют, есть такое

Где регрессионные тесты ?
Там где код хорошо оптимизирован, то получается както так
github.com/.../utilcode/ilformatter.cpp

Ахаха, смотри что я нашел. Самый сок Garbage Collector.
github.com/...7ddc129f755/src/gc/gc.cpp

Один единственный файл исходника на 37 тысяч строк (!!)
Вот это треш так треш.

И ты теперь будешь мне рассказывать что мой скромный оптимизированный файл на 2 тысячи строк и 4 метода DniproDB_Query.cpp это «говнокод». Бугага )))

Ахаха, смотри что я нашел. Самый сок Garbage Collector.
ниче так что этому файлу около 15 лет со всеми историческими наслоениями, кучей противоречивых бизнес реквариментов, полдесятком поддерживаемых платформ и пол-интернета тыкают в него разрабов с каментами «так делать не надо»?
У тебя же аналогичное говно прям с нуля выходит. Разве что сложности задачи недостаточно.
ниче так что этому файлу около 15 лет со всеми историческими наслоениями, кучей противоречивых бизнес реквариментов, полдесятком поддерживаемых платформ и пол-интернета тыкают в него разрабов с каментами «так делать не надо»?У тебя же аналогичное говно прям с нуля выходит. Разве что сложности задачи недостаточно.

Бизнесс реквариементы к Garbage Collector. Однако, мсье знает толк ...
Упустим. По сути, когда до тебя наконец дойдет, что этот файл написан именно так как он написан чуть ли не единственным верным способом, ввиду своей черезвычайной оптимизированости и сложности самих алгоритмов, тогда наконец и сам может быть дорастешь писать такие нетленные вещи.

Бизнесс реквариементы к Garbage Collector. Однако, мсье знает толк ...
А что тебя смущает? Давай переведем и назовем это «функциональные требования», так легче будет?
писать такие нетленные вещи.
именно, ваять нетленки! Я знал что это будет :)
Нетленок в мире ну совсем раз-2 и обчелся. То же ядро линукса уже переписано и не раз. Но доморощенных гениев с горящими глазами, никому не нужными кустарными поделками и чсв over 9000 — на каждом углу :)

ну вот буст уже написал пулы и инаксулировал goto там где это необходимо. Вот это все надо взять и заюзать вместо того чтобы свои велосипеды городить.
Возьми постгресс. в разы более релевантно — там аж целых 177 goto, большая часть из которых в
«/* This file was generated automatically by the Snowball to ANSI C compiler */»

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

github.com/...?utf8=✓&q=qsort&type=Code

Везде свой велосипед.

там написано прям в коде чем свой велосипед отличается от стандартного. Мелочь казалось бы...

Мой код представляет коммерческую ценность. Но чета даже на гитхабе есть, найти несложно.

А можна лінк? Мені ліньки шукати ваш гітхаб. А то ще знайду не ваш, от буде халепа

А смысл? Там у архитектора куча фабрик синглтонов и другого ненужного позора. Вот пример кода взрослых людей github.com/...ob/master/malloc/malloc.c . Но ипам архитектор щас и дага ли обосрет и буст вписздячит.

Это не код, это какаято выдержка из клуба благородных Девиц. Все классы скучные, трехкопеечные. Что он вообще делает ? Похоже задача утилитки выполнять задачу чуть сложнее чем выводить на консоль строку HelloWorld.

PS: Гениально
github.com/...Wrappers/DateTimeProxy.cs

именна. Рутинные вещи, которые обычно копипастятся из проекта в проект.

PS: Гениально
github.com/...Wrappers/DateTimeProxy.cs
так и запишем: про юнит тесты не слышал ничего. В доке впрочем достаточно подробно написано зачем оно так.

WTF ?! Что ты собрался покрыть юнит тестами в том классе ? Протестировать DateTime класс ? Серьезно ? )

омг. этот класс можно замркать и подсунуть тому, кто его использует любое нужное значение даты- времени. Datetime.Now — не мокается.
так понятней?

К сожалению ссылку на свое поделие ты удалил и я не смогу поставить окончательный диагноз

пива перепил или просто трындишь?

С год назад прошелся по старым старым проектам, собрал и причесал.

На мою думку, ви не маєте морального права називати код Boobem Com’a лайнокодом.

каждый имеет право на свое мнение.

Але чи має кожний моральне право заявляти, що думка іншого — лайно?

Вопрос философский. Я сторонник мнения, что право на аргументированно обоснованное заявление про «говно» имеет каждый.

І що це дасть, окрім як втіхи від пестування власного ПВВ? Ви можете зробити тільки одне — вирішити задачу краще. Розповідати про «помилки» може будь хто. Наприклад, я перестав називати чужий код лайнокодом дуже давно. Власний можу, чужий — вибачте, то не моя справа. Що й вам раджу.

І що це дасть, окрім як втіхи від пестування власного ПВВ
консьруктивная критика очень даже полезна. Даже если преподнесена с сарказмом. Ессна ж при условии что критикуемый готов слушать, а не уходит в раж “мой код идеален!!!”
Ну правда, именованые константы работают не медленей магических цифр; современный компилятор отлично справляется с оптимизацией и раскладывает x*4 в битовые сдвиги; деструктор ни разе не медленей функции destroy(), зато вызовется обязательно без участия программиста; инлайнинг функций не нужен в 99.9% случаев, в остальных профайлер подскажет и так далее и тому подобное.
Ви можете зробити тільки одне — вирішити задачу краще
Это далеко не единственный способ. Но пожалуй наиболее ресурсоемкий.
Наприклад, я перестав називати чужий код лайнокодом дуже давно. Власний можу, чужий — вибачте, то не моя справа.
а мне например деньги платят в том числе и за то, что я смотрю на чужой код и говорю, говно он или нет. В политкорректных выражениях ессна ж. И спасибо говорят за выявленные проблемах. Code review называется. И с архитектурой тоже самое кстате. Architecture review. Не слышали? Ну такое.
Що й вам раджу
та я вроде советов не просил.

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

твоему коду ни ревью, ни созданная мной в этом топике реклама не поможет. Он мертворожденный и никому не нужен. В первую очередь из-за твоего раздутого на ровном месте чсв.
И заметь, ни на одно замечание по сути ты толком не ответил. Максимум — продекларировал что библиотечный код — говно, даже без попыток анализа и сравнения.

Ну так твои замечания глупые. Ну например про destroy до тебя не доходит паттерн объекта который лежит в пуле и никогда не удаляется. У него два метода init и destroy. Когда с пула достают объект вызывают инит. А когда возвращают на покой дестрой. Ты даешь унылые вбросы руководствуясь своим продутым ЧСВ что кто-то не знает про деструкторы. Ну а в целом уровень твоей квалификации не позволяет переписать библиотечные методы эффективней под себя.
Сидишь там чето мокаешь. Ну мокай чо

я тебе еще раз говорю — иди учи Raii. Специально для подобных кейсов придумали.

С таким успехом мне проще завести хорошего пернатого попугая. Посадить его в клетку и приучить его выкрикивать разные «умные» слова Rail ! ACID ! Base ! CAP ! Boost ! и тд.

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

так и запишем — книжек читать не обучен. Ну так и быть, я тебе линку подсуну:
www.boost.org/.../smart_ptr/shared_ptr.htm
читай до отупения секцию «constructors taking a deleter»
Вот не частно встретишь человека, гордящегося своей безграмотностью.

Это ты вообще к какой теме сказал ? Что это решает в каком куске кода это ты собрался использовать ? Как использовать ? На сколько это решение будет лучше (быстрее) работать ?
Ну и главный вопрос. Думаешь попугая сложно обучить фразе «Читай Буст» ?

Те, що ви робите код або архітектурне ревью ще не означає, що ви автоматом стаєте гуру програмування або архітектури. ;) Бачили ми таких рев’юверів вже. Приходять та з порогу заявляють — ваш код лайно, архітектура лайно, ми зробимо краще. І саме смішне, що не можуть таки зробити... Зато пафоса...

И такое тоже бывает. Но обычно в таких случаях до кокретных рекомендаций по улучшению не доходят.

Знаєте які рекомендації давали мені? Викинути ото все, що я наковбасив, взяти нормальні фреймворки й все переписати (й досі дають). Потім аудит робили технарі, вони таки полізли в код більш детально. Мені було потім приємно чути наступне: "Офігенчик! З усім розібралися, все зрозуміло, все як на долоні, трохи не звично для наших технологій, на яких ми знаємося, але все ок. Просто рівень трохи інший у аудиторів був...

я рад что у вас был такой интересный икспириенс.

maintainablity кода ен фонтан. Но тут понятно почему так; в отличии от.

Потому мы за твоим авторством никогда и ничего ценного скорей всего не увидим.
я вот вспомнил кое-чего.... а это ж Сергей кингс баунти 2 написал, многие играли, может и ты тоже

не-к, я не настолько стар. Это мой тезка, постоянно в молодости меня подкалывали :)

WTF??)Надеюсь, вы там платежные системы на монге не пишете еще?)
Хочешь приколю? Те же банкоматы работают не по ACID, а по BASE, но с аудитом, т.е. сведением в конце банковского дня кредита с дебитом и последующем разруливанием овердрафтов.
у нас, возможно, никогда не появятся действительно продукты с мировым именем
Ммм... А на кой они «нам»? Страна разработки или национальная принадлежность разработчика — будет последнее, на что я посмотрю при выборе технологии.

На mongodb можно посмотреть, удобно работать с Angular (см. OData). Поддержка linq есть.

на городе бузина(mongodb) а в киеве дядька (angular, odata).

Что именно вызывает иронию у Solution Architect в EPAM? Поменять реализацию репозитория с EF + SQLExpress на mongodb? или само использование mongodb? или делать запросы из angular в mongodb без написания дополнительного серверсайд кода?

Ну как бы кэп намекает, что с ангуляра одинаково удобно работать с 99% баз данных. Одата это конечно хорошо, но и прикрутить соотвествующий эндопойнд используя asp.net webapi одинаково несложно(поначалу, гг) опять таки с любым из дата провайдеров, поддерживающим линк.
Поэтому и на городе бузина, а в киеве дядька.
Отдельный вопрос — это необходимость переписывания кода с EF на что нибудь другое, все таки EF сапортит несколько разных субд. Но это вопрос к топикстартеру.

ТС рассматривал даже JsonDB, у EF есть саппорт этого зверька? сомневаюсь.
Поэтому я и предложил mongodb

топикстартер хочет чего полегковестней чем mssql. Ему уже 2 рсубд насоветовали с поддержкой ef. Кстате, я бы с сиквела спрыгивал только имея на руках результаты перфоманс тестов.

В SQLExpress смущает не убъет ли он флеш память самостоятельными операциям обслуживания. Поэтому раздумываю о смене движка БД.
а я понял как SSD (флешку) жалко.
самостоятельными операциям обслуживания..

Какое именно обслуживание?
Какоы размер базы? Сколько памяти? Как много пишется?
Судя по SQL Server Express,

The maximum memory for the database engine is limited to 1GB and the maximum relational database size is 10GB

а я понял как SSD (флешку) жалко.
я недочитал. Ну имха — не убьет, слухи о недолговечности современных ssd несколько преувеличены, равно как и страшилки про mssql.

Зачастую n% скорости/цены разработки важнее k% производительности которые вполне могут быть неверстаны/потеряны в другом месте

ну имха очевидно что переписывание бекенда только добавляет в цене разработки уменьшая попутно скорость.

Поменять реализацию репозитория с EF + SQLExpress
Это такие типа классы, что реализуют всякие IRepository ? Типа ProductRepository : IProductRepository ?

Подписаться на комментарии