Собираю команду бетатестеров — СУБД Днiпро

Поскольку в интернете множество проектов с плохой документацией, решил исправить это и написал небольшую книгу-самоучитель, прочитав которую читатель сможет быстро войти в курс дела. Книга рассматривает как архитектурные решения, так и полный самоучитель по основной функциональности базы данных.
booben.com/DniproDB_In_Using_EN.pdf

Немного о проекте:
Украинский проект. JSON ориентированая высокопроизводительная база данных с транзакциями, простым синтаксисом и ORM. Ее создание складывалось как пазл в течении шести лет и наконец проект попал в релиз.

На данный момент доступен .NET клиент.
Java клиент в разработке.

Підписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті

👍ПодобаєтьсяСподобалось0
До обраногоВ обраному0
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

Немного доработал проект.
1. Добавил Каскадные (Вложеные) Транзакции.
Далеко не каждая промышленная СУБД их поддерживает.
Днипра поддерживает, архитектура пока что зачот :)
2. Сделал порт под Linux системы (было не сложно)
3. Добавил функцию самотестирования сервера. Набираем в консоле db.SelfTest() и сервер выполняет 9 млн запросов в 10 бенчмарках. У меня на машине такой тест занимает меньше 8 секунд. А у Вас сколько ?
4. Обновил документацию (ссылка есть в первом посте).
Блобы+Каскадные транзакции+Инсталляция под Линукс — добавлены новые разделы.

Хабр — пока статьи не написал, извиняюсь за заминки. Пока не могу найти времени. Но думается что это будет всетаки цикл статей, есть о чем рассказать.

Кстате я немного удивлен. GCC действительно скомпилировал более качественный код. Он гдето по моим прикидкам на 15% быстрее работает чем VC++ и его Win версия.

Кстати, неплохо было бы, если бы консоль была полноценной. Т.е. со «стандартной» обработкой таба, стрелок вверх/вниз, автодополнением и прочими атрибутами современных консолей.

К сожалению я настолько не знаю Линукс :(
Едва хватило знаний чтобы это портировать за 2 дня.

Нуу ... както так, рекламный щит Риедми готов
github.com/...ver/blob/master/README.md

PS: Тупанул, мне говорят про Риедми, а я как виндоус юзер едва освоивший гит думаю, это что текстового файлика в корне не хватает. Ктож их читает то =)

Ну так `*.txt` никто не читает, а вот `*.md` - большинство :)

Реализовал простой клиент для Джава.
Пример использования.
github.com/...est/DniproClientTest.java

Весь клиент (без ОРМ) занял всего несколько строк
github.com/...niproClient/DniproDB.java

В таком стиле, наверное, можно написать клиент для PHP, Python, Ruby и тд

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

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

Чуток расширил функционал.
1. Добавил новые методы в провайдер .NET и на сервере: Exec для выполнения динамических запросов и ExecScript для удаленного запуска скриптов.
2. Добавил новый тип данных Блоб, теперь база не полностью ИнМемори. Если есть Медиа или Текстовый контент — лучше хранить в блобах. Блобы хранятся и читаются с диска.

Синтаксис примерно такой

db.AddDoc(new {FirstName = "John", Photo = new byte[1024*1024]});

Photo атрибут тут блоб на 1 мегабайт. Сам по себе он хранится отдельно и не засоряет документ.
ОРМ сама распознает что есть поле Блоб и работает с ним как «тяжелые типы данных». По ним нет индексов, по ним нельзя искать и они хранятся на диске.

Дальше в планах добавить коллекции (аналоги таблиц), сейчас хранится всё в одной sсhemaless коллекции. И продумать синтаксис для агрегирующих запросов GroupBy

то есть, размер блоба надо знать и задавать наперед?
не найс

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

Стоп, я наверное сначала немного неправильно понял вопрос.
Конечно, в стандартной модели мы не знаем размер блоба при вставке документа. Например мы добавляем товар, или регестрируется человек в соц сети. Никакие коллекции фото или другой медиа у нас нет. Это будет добавлено\обновлено уже потом, при редактировании документа.
И конечно же вы можете написать чтото вида

db.AddDoc(new {FirstName = «John»);

А позже, когда загрузили фото или другой контент, обновить документ

db.InsPartDoc(new {Photo = new byte[1024*1024]}, docID);

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

А может лучше сразу обрабатывать готовые форматы? По mime-types, скажем?
Их будет сильно удобнее в API дальше поддерживать.
И бог с ним, если будут далеко не все — по ходу добавлять можно.
Зато по известным иногда можно и некие сортировки-поиски сообразить без использования внешних полей и рефератов.

Ну там почти так и сделано.
Документ хранит только лейбу блоба.
В данном случае размер массива и смещение. Можно добавить конечно тип контента. Только вот как сериализатор будет его преобразовывать. Сейчас все просто. Массив байт это блоб. А дальше уже сам язык программирования решает как этот байтарей интерпретировать. Ну также как какой нить nvarchar(max) в обычной бд

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

Да, именно так и сделано.
Добавлены две отдельных ф-ции.
AddBlobValue и GetBlobValue.
И через них хоть библиотеку Мошкова заливай

Доречі, гео-індекси чи пошук за координатами підтримується (якщо ні, то чи планується)?

Key\Value подходит для многих вещей, в том числе и гео запросов.
Скорость его работы, простит некоторые огрехи самой имплементации, по крайней мере на начальном этапе (Запросы вида: Найти всех в радиусе X.)

Но для серьезных имплементаций, лучше использовать базы данных которые проточены для этого и реализовют такие структуры данных
en.wikipedia.org/wiki/R-tree

Есть еще мотоцикл такой, и ракета такая есть, да много чего =)
Можно еще подумать, как называть разные версии.
Ну знаете у Гугла Андроид выходит с разными названиями кондитерки,
а тут можно, например, гетьманов перечислять ))

1. Как обещал, Сервер теперь в опенсорце. Солюшин создан под Visual Studio Express 2015 (C++)
github.com/...rver/tree/master/DniproDB
Код, скажем так, своеобразен. Это мой стиль в условиях ограниченого времени, быстро нагонять функциональность и концентрироваться только на основных архитектурных моментах. И дальше постепенно по мере развития, рефакторить и приводить разные части в порядок. Как на меня, дебажится и читается очень легко, ничего лишнего.

2. На 80% закончил инерпретатор запросов о котором тут говорили ранее (достаточно примитивный на 20 с лишним методов сервера). Сейчас прямо в консоли можно выполнять код на сервере.
Например, както так
db.AddDoc("{'attr':'val'}") db.AddDoc("{'attr':'val'}") db.AddDoc("{'attr':'val'}") db.GetWhere("{'attr':'val'}").Take(2).Print("{'attr':$}")

Интерпретатор открывает дверь к возможности взять и запустить какойнить апдейт скрипт на сервере на XXXX строк. И позволит в будуйщем интегрировать с сервером более примитивные языки (которые не имеют рефлексии, сериализаторов и прочих плюшек для полноценного ОРМ). Любой ЯП с которого можно послать текст на сокет (текст запроса) и получить текст обратно (джисон(ы)) сможет работать с сервером.

README очень хотелось бы видеть.
С инструкцией по сборке и запуском чего-то тестового типа Main.cpp.

Бинарники (*.exe) и временные файлы Студии (.vs/, *.suo, *.vcxproj.user) обычно идут в gitignore.
github.com/...er/VisualStudio.gitignore

Server.h — это единственная Windows-зависимая часть?
Если да, для «портирования» под *nix достаточно убрать Winsock.
И не прийдётся распугивать потенциальных юзеров словами Windows-only.

README очень хотелось бы видеть.
С инструкцией по сборке и запуском чего-то тестового типа Main.cpp.

Если под Вин, там просто даблклик на солюшие и F5 откомпилировать, там все просто.

Бинарники (*.exe) и временные файлы Студии (.vs/, *.suo, *.vcxproj.user) обычно идут в gitignore.
github.com/...er/VisualStudio.gitignore

Ок, добавлю

Server.h — это единственная Windows-зависимая часть?
Если да, для «портирования» под *nix достаточно убрать Winsock.
И не прийдётся распугивать потенциальных юзеров словами Windows-only.

Ну почти. Есть еще по мелочам CreateThread из WinApi и работа с файлами (может чтото прийдется подредактировать). Атомики (Интерлоки), не знаю или под Линукс уже есть в GCC.

Сейчас первая задача под Java порт клиента дописать (DniproClient.JVM), поскольку портировать то сервер под Linux можно, а из под какого клиента туда ходить ? )

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

Бинарники (*.exe) и временные файлы Студии (.vs/, *.suo, *.vcxproj.user) обычно идут в gitignore.

Для бинарников есть github.com/...ist/DniproServer/releases в репе лежать не должны.

Лицензия очень странная. То что я прочитал это не опен-сорс. Опенсорсные — все стандартные. Без «Anyone can use the Products in demomode »

То что ты описал это больше GNU GPL (можно делать все, кроме коммерс использования).

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

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

Для бинарников есть github.com/...ist/DniproServer/releases в репе лежать не должны.

Убрал из основного репозитория. В остальных чуть позже.

Лицензия очень странная. То что я прочитал это не опен-сорс. Опенсорсные — все стандартные. Без «Anyone can use the Products in demomode »

Поменяю на GNU GPL

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

Это да, нужно чтобы нэйтив какойто прочитал, поправил.
Еще будет версия на укр. языке и ее тоже нужно будет править.
(На русском версию не планирую, кстате)

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

Вы видели вообще удачный проект с документацией на русском?
Это чёрная метка, по силе сравнимая с закрытыми исходниками.

Booben Com, комментарии в cp1251, в 2016 году, выглядят, мягко выражаясь, анахронизмом.

У дот нета вроде переведана, мдн переведен, пхп вообще на все переведен

От и делать надо, как делали php, .net и т.д. — писать на английском, делать проект успешным, и ждать, пока левые люди задним числом попереводят на свои языки.

Вы видели вообще удачный проект с документацией на русском?
Nginx

Давайте сделаем так. Если ктото переведет, то я добавлю в репозиторий рус версию, без проблем.
Самому переводить на 3 языка (eng, укр, рус) все 42 стр, на это просто нет сейчас времени :(

Англ достаточно будет с головой.

Я бы потестировал версию для Linux.

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

В общем прочитал перед сном половину доки. Вопросы и замечания :

— Где красивые графички? Посмотри (я на ты, если можно), например, как грамотно люди продвигают новый ява пул соединений — github.com/...e/HikariCP#jmh-benchmarks. Это называется маркетинг. И да, он нужен.
— Dnipro — in memory DB. Если Днипро — инмемори, то сравнивать производительность нужно с редисом, мемкешем, ш2, тарантулом но никак не с монгой или мускулом. С другой стороны у тебя немного не No-SQL, и твоя БД делает немного больше чем просто ключ-значение.
— Код тестов, на которые ссылается дока на каком-то убогом форуме с 2-мя человеками в каких-то непонятных постах. Даже если хорошо подготовить код, тесты, сделать инструкцию по выполнению в них заглянет 0.5% людей прочитавших пост, но чтобы они заглянули — условия выше обязательны.
— «The database required Windows platform. » - ну тут я даже не знаю что сказать. В то время когда майкрософт портирует свой софт на юниксы, продает юниксы сервера в своих клаудах... Ты предлагаешь ограничиватся одной виндой. Откуда это ограничение и почему? (я честно хотел потестить, но винды нету)
— Для доки есть гитхаб. Дока в доках это какие-то 90-е. Есть прекрасная и красивая гитхаб разметка. Вот читаю вижу кучу опечаток и ошибок. Был бы гитхаб уже бы пулреквест отправил.

P. S. База меня заинтересовала и я даже не против был бы ее заюзать в нашем проекте — github.com/blynkkk/blynk-server. Как раз недавно искал нечто подобное. Простое хранилище ключ-джейсон с персистенсом на диск. Остановился на постгресе.

— Где красивые графички? Посмотри (я на ты, если можно), например, как грамотно люди продвигают новый ява пул соединений — github.com/...e/HikariCP#jmh-benchmarks. Это называется маркетинг. И да, он нужен.
Код тестов, на которые ссылается дока на каком-то убогом форуме с 2-мя человеками в каких-то непонятных постах. Даже если хорошо подготовить код, тесты, сделать инструкцию по выполнению в них заглянет 0.5% людей прочитавших пост, но чтобы они заглянули — условия выше обязательны.

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

Dnipro — in memory DB. Если Днипро — инмемори, то сравнивать производительность нужно с редисом, мемкешем, ш2, тарантулом но никак не с монгой или мускулом. С другой стороны у тебя немного не No-SQL, и твоя БД делает немного больше чем просто ключ-значение.

На самом деле база лежит гдето между. Обеспечивая ACID и Траназакционность ее можно сравнивать с RDBMS, ин-мемори здесь выступает больше как требование оборудования. Наиболее корректны здесь тесты с Монго, они ближе всего по функциональности. В бенчмарке с Монго, например у него включена опция отложеная запись на диск. А это есть ничто иное как поведение Ин-Мемори базы данных. Но вопрос тут еще шире. При вставке документа индексация происходит по всем полям документа у меня, а у Монго нет. И это тоже нужно учитывать, индексы замедляют вставки. Если говорить про чистый Ин-Мемори, чтобы сравнить с Редис и Мемкешем, то нужно вынимать чистый Key\Value движок из Днипры и ловить примерно такую разницу =)
wiki.pikosec.com/...p?title=VymaDB:Benchmarks

Модель Ин-Мемори была выбрана как наиболее перспективная в том плане, что для RAM закон Мура не остановился. В ближайшем будуйщем мы вполне можем увидеть бюджетные машинки с 256-512 гб на борту.

«The database required Windows platform. » - ну тут я даже не знаю что сказать. В то время когда майкрософт портирует свой софт на юниксы, продает юниксы сервера в своих клаудах... Ты предлагаешь ограничиватся одной виндой. Откуда это ограничение и почему? (я честно хотел потестить, но винды нету)

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

Для доки есть гитхаб. Дока в доках это какие-то 90-е. Есть прекрасная и красивая гитхаб разметка. Вот читаю вижу кучу опечаток и ошибок. Был бы гитхаб уже бы пулреквест отправил.

Да, нужно сделать. Спасибо за комментарий.

P. S. База меня заинтересовала и я даже не против был бы ее заюзать в нашем проекте — github.com/blynkkk/blynk-server. Как раз недавно искал нечто подобное. Простое хранилище ключ-джейсон с персистенсом на диск. Остановился на постгресе.

А это хороший поинт. Если надумаете пишите. В отличии от Постгреса, если понадобится чтото специфическое в базе, помогу допилить.

Что-то рассылка поломалась и я пропустил ответ.

Думал об этом, но решил что лучше, если эти графики и бенчмарки построит третья сторона.
Ну этого никто не будет делать, если о тебе так никто и не узнает. Что без графичков более чем вероятно =).
Вы же понимаете
Конечно (можно на ты). Но еще я знаю что если о себе не кричать, то до контрпримеров и не дойдет.
Мне показалась более ценной идея самоучителя, которая показывает не только примеры, но и архитектурные моменты, чтобы можно было понять почему это быстрее работает.

Не могу сказать за всех но в моем случае проба новой технологии выглядит так — зашел на гитхаб, скопировал maven артефакт, скопировал код из getting started, поднял что-то если надо, запустил. Чем короче и быстрее этот путь тем больше вероятность успеха.

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

Тогда тем более удивительно почему нету порта под линукс. Да, конечно, времени нету. Но ты вот сразу отсек 70% потенциальных пользователей.

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

Коментар порушує правила спільноти і видалений модераторами.

буде клієнт для Python — дайте знати, потестую)

А можно не .doc?

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

хм .. а если исходники будут, всего сервера, всех внутренностей но, скажем так, без самописной «std::map» ?

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

в devzen подкаст недавно автор www.rethinkdb.com приходил
Послушай что он там рассказывал и прикинь шансы в одиночку выпилить продакшен базу

А с чем он интересно приходил то ?
Вот типичный бенчмарк на ресинк
www.amon.cx/...-reviewed-by-a-mongo-fan

Тот сливает у Монго многократно.
А у меня Монго сливает многократно.

Нужно же набор фич иметь. Хотябы базово уметь ответить на вопрос Почему.
В данном случае — Человеческая ОРМ + Транзакции + Скорость.

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

А в чем проблема выложить исходники? Ложишь подходящую лицензию и никаких проблем. Если решение кого-то действительно заинтересует — они с радостью заплатят чтобы убрать ограничения лицензии. Мы свой Блинк сервер выложили и это не мешает нам на нем зарабатывать.

Коментар порушує правила спільноти і видалений модераторами.

Провел тест с розеткой.
Запустил массовый инсерт доков и вырубил сервак брутально выдернув вилку с розетки.
Перегрузился, сервак поднялся корректно. Последняя незавершенная транзакция откатилась.

Бубен, ты бы свой поисковик довёл до ума и начал бы пиарить- может микрософт купит его и выбросит свой бинг.

Оба проекта будут жить. И оба развиваться.
Днипра имеет почти идеальную сборку ядра. Не смотря на свой смешной размер в 114 кб (потому что переписано все с нуля). Взрослые транзакции и аккуратные блокировки документов на уровне аттрибута. Плюс скорость работы, как бонус, когда всё там где и должно быть. Многие фичи из этой базы большинство остальных NoSql проектов не увидят никогда в виду ущербности их архитектуры =) Туже Mongo, Couch, Rethink для доведения их до ума, прийдется переписать почти полностью. Блок на весь документ, отсудствие транзакций и тд.

Лучше не так тестировать. Подвесь сторадж по iSCSI или SMB/NFS со второго компа и рубани сеть между ними в процессе. Будет классический кейс помирающего стораджа и таймаутов на вводе-выводе.

Попробую и так. А чем теор. тест будет отличаться от розетки ?
По идее я расчитываю что блок будет не дописан на полубайте в конце. Тогда можно будет определить corrupted транзакцию и провести восстановление.

А чем теор. тест будет отличаться от розетки ?
Они схожи, но последний моделирует ситуацию когда код не знает, что записать он уже ничего не может (в случае розетки код выполняться перестает). Также тестируются длинные таймауты.
Ну и для самого сервера это менее напряжно и удобно дебажить если что не так.

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

Клиенты как раз сразу опенсорц, твердо и четко ©
github.com/Bazist/DniproClient.NET

Сам сервер, тот что мозгодробильня на Си, не опенсорц

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

Завтра попробую выложить серверную часть в опенсорц.

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

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

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

Но мне кажется что погоды не сделает,

Не сделает. Нужны грамотные тесты с исходниками и статьи под них на хабр, реддит. Обкатать статью можно на ДОУ. И только тогда появится шанс на внимание.

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

Пока не станешь известным ты никому не нужен. а когда станешь это уже не будет проблемой.

Ну чо мужики. База в овер 30 раз кроет реляционки, в овер 10 раз монги и никто не хочет протестировать )) Нужно менторить украинский проекты. Это и есть те кирпичики из которых состоит имидж страны. Всяко полезней чем про электронное правительство бла бла и как первезти вещички в Польшу. ИМХО конено.

PS:
Кстате, кто может инвайт на хабр дать.
Хочу еще там развернутую техническую статью написать.

Он жив, здоров. Приносит радость людям каждый день
booben.com/...b+1&s=online&a=search&p=1

Он то и выступил по сути донором для этой СУБД.
Эта СУБД замена Монго, только с нормальным синтаксисом (наконецто), транзакциями и джоинами.

только с нормальным синтаксисом (наконецто)
А что, собственно, не так с синтаксисом монги?

Мне не нравится. Посмотри хотябы на джоин

А, т.е. это так, личное. Ясно...
Джоинов в монге нету.

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

Вы про $ref или $lookup? Имхо, оба представлены в стиле монги.

Да, эти.

Что мне нравится в Днипре, что там есть базовый случай.
Можно написать вот так, просто

db.AddDoc(obj)

Где obj это какойто бизнесс обьект невероятных размеров, и всё.
База добавит документ, проиндексирует его по всем аттрибутам и предоставит мощные инструменты для поиска внутри этого документа. Причем это будет все работать очень быстро. Днипра также предоставит возможности частично обьект сохранять и частично обновлять из базы, что природно ложитя на архитектуры с 100500 вложенных формочек, открыть-сохранить.

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

Да, неплохо :)
Судя по приведенной строчке это синтаксис на уровне драйвера, верно?

Да. В туториале с первого поста все есть )

Да, читал — просто уточнил. Тогда встречный вопрос. Будет ли данный синтаксис доступен с нативного клиента? Т.е. аналогично консольной тулзе монги.

Да, будет. Но попозже. Там простой интерпретатор запросов нетяжело запилить.

А что вам не нравиться в вашей БД? Какие есть known issues или что-то требующей дальнейшего усовершенствования?

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

Но надеюсь в опенсорце знающие люди чего подскажут, как подкрутить, куда копать.

Сломался ваш поисковик... А еще про меня никакой инфы вообще не выдает :(

А, понял. Просто затупил :)
И инфу, как понимаю, тянет только с тех сайтов, что есть в списке.

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

Поиск действительно иногда глючит, кубы например можно еще так искать, указав на каком именно сайте
booben.com/...a+1&s=online&a=search&p=1

Гифы
booben.com/...f+1&s=online&a=search&p=1

Возможностей там хватает, но нужно знать что набирать в строке поиска

С меня инвайт, с тебя статья! Кидай мейл.

Пришел инвайт, до конца след. недели постараюсь подготовить статью )

А как Вы тесты писали? Как сравнвали? InMemory базу с базой, которая пишет на диск? :)

ИнМемори тоже пишет на диск. Иначе с АСИД пролетим.

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