Как стать автором
Обновить

Комментарии 18

НЛО прилетело и опубликовало эту надпись здесь
При конфигурировании БД вы указываете ей каталог, в котором хранить данные.
НЛО прилетело и опубликовало эту надпись здесь
Просто в переменные писать.
(вопрос по лицензии) Если у меня когдато станет больше 10 миллионов записей, сколько оно будет стоить? Алсо, 10 миллионов записей — это сколько в ОЗУ примерно (доупастим одна запись килобайт)? Пилю библиотеку поиска, работает в памяти, но ей нужен какой-нибудь способ на диск сбрасывать новые записи, чтобы не потерять что-либо при потере питания например. Сейчас — boltdb, который при добавлении большого количества данных мягко говоря тупит, ищу альтернативу.
Попробуйте, подойдёт ли реально для ваших нужд, если да (а это было бы здорово), то я для вас расширю её (детали если что, можно в личке обсудить). Я особо не заморачивался на тему большого количества записей, больше волновал вопрос надёжности.

Прошу прощения, что вмешиваюсь, но если вы пишете систему поиска по векторам, то рекомендую присмотреться к Vearch.
https://github.com/vearch/


Это система, написанная в jd.com, она уже отлажена в проде на сотнях миллиардов векторов и работает достаточно стабильно.

Я пока наблюдаю за pebble и надеюсь, что его доделают. Особенно интересно читать про внутренности rocksdb

В свое время у меня была задача сделать подключение в Go хранения данных в KV хранилищах. Долго не мог выбрать, и в итоге сделал "универсальную" обертку с несколькими бэк-эндами. https://github.com/reddec/storages
Бонусом: всякая разная типо-безопасная кодогенерация. Возможно будет интересно.

Кстати, хорошая идея. А какое хранилище обычно чаще всего используете?

leveldb для себя и S3 + redis для работы

А в чем принципиальное отличие от словаря (он же ассоциативный массив) обернутого спинлоком?

Исходя из кода — ни в чем. Просто навернули слоёв и api. Много захардкожено.

Простите, но ваша бд — это
type Records struct {
mtx sync.RWMutex
store *storage
}


Это не про параллелизм и оптимизацию на конкурентный код.

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

Я как-то видел симпатичную инфографику в какой-то статье здесь на Хабре, в ней, если мне не изменяет память, в круговой диаграмме было разрисовано, сколько и чего делают современные БД, и работа с данными там занимала весьма небольшую часть круга. Но замечание ваше принимаю, и если и когда я сделаю такие изменения, я с удовольствием поделюсь этой новостью с вами и сообществом, возможно, результат будет гораздо оптимистичней, чем я ожидаю (вот и ещё один пункт в ToDo).

При каких условиях не является? При скольких потоках выполнения и логических ядер?
Проблем несколько, одна из них в том, что лок один. И это быстро убивает прирост от увеличения ядер/процессоров(в гошном смысле).


Но как и всегда, всё надо проверять хорошими и воспроизводимыми бенчмарками.


Lockfree тоже не бесплатно и не панацея.


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


*Базы и нужды бывают разные. Или вы про то, что если все базы усреднить? Тогда это вряд ли полезно будет.

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

Про параллелизм: я думаю, что понимаю вашу мысль, т.к. мне приходилось делать библиотечку, рассчитанную выжать как можно больше из ядер, и чем их больше (ядер), тем лучше. Эта мысль логичная и не противоречит мои планам.

Из текста я так и не понял зачем нужно писать (и уж тем более использовать) ещё один kv сторадж на Go вместо того, чтобы использовать готовые, в которых есть весь упомянутый функционал плюс ещё очень много из того, что не упомянуто, и апи более логичный и чистый. Например, индексы, язык запросов, оптимизации. Cui prodest?
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Изменить настройки темы

Истории