13 Aug 2026, 16:03 UTC781 views74 reactions3 Starsread 15 August 2026 Привет!
Вас стало больше, так что пора наконец представиться 🙂 Я Даша, давно пишу на Go, но на своем тернистом пути постоянно нахожу интересности во внутренностях языка. Пишу про производительность, работу с бд и свои наблюдения, которыми грех не поделится.
Параллельно развиваю свой поисковый движок FTS engine (который в народе прозвали Fast Turtle Search): https://github.com/dariasmyr/fts-engine
Из-за него тут ре…
❤53👍12🔥7🐳1😱1
Signed daria smyr
12 Aug 2026, 17:08 UTC984 views19 reactions15 Starsread 15 August 2026 Photo
HNSW: как устроен графовый индекс для векторного поиска
One million years later, я наконец добралась до прикручивания в проект семантического поиска.
Тащить ради этого отдельную векторную бд максимально не хотелось, поэтому решила пойти классическим путем - попробовать встроить индекс HNSW прямо в движок наравне с остальными индексами.
Если кратко, HNSW - это графовый индекс для approximate nearest neighbor поиска…
🔥12❤5👏2
Signed daria smyr
9 Aug 2026, 22:19 UTC≈1,040 views21 reactions14 Starsread 15 August 2026 Недавно @dmedovich добавил в движок flat inverted index под данные с высокой кардинальностью и даже написал отдельную статью про его устройство и оптимизации. Мое дело, конечно, найти, что из этого имеет смысл перенести в мои существующие индексаторы HAMT/radix. Потому что заинтересовала меня не столько хешмапа, на которой строится индекс, сколько обвязка вокруг нее.
Начала с простого: fast append для списка докумен…
🔥8❤7👍4⚡1🤯1
Signed daria smyr
26 Jul 2026, 15:09 UTC≈1,030 views21 reactions10 Starsread 15 August 2026 Photo
Отделяем текстовый скоринг от продуктового ранжирования
Как оказалось, научить поисковый движок находить релевантные документы = только половина задачи. Следующий вопрос в том, какие из найденных совпадений важнее для конкретного продукта.
Окей, движок уже умеeт строить индексы по нескольким полям (title, abstract и т.д.) и поддерживает разные типы поиска: например term, phrase, prefix, фразовый поиск. Но после пои…
❤13🔥4👍2🤯2
Signed daria smyr
26 Jun 2026, 00:37 UTC≈1,170 views25 reactions11 Starsread 15 August 2026 В продолжение темы про коннекты: выше описывала кейс про pgx-пул, где коннекты росли быстрее, чем RPS, потому что запросы стали дольше удерживать соединения.
В этот раз кейс тоже про коннекты, но уже HTTPшные: ручка начала отвечать почти в 2 раза дольше, хотя ни бд, ни зависимый сервис по отдельности такого роста не показывали.
Представим: есть сервис A. Внутри он ходит в другой сервис - B. Запрос может прийти с бо…
❤12👍6🔥6🏆1
Signed daria smyr
23 Jun 2026, 23:18 UTC≈1,040 views20 reactions10 Starsread 15 August 2026 Почему коннекты растут быстрее, чем RPS
Недавно разбирала кейс: в pgx пуле резко выросло количество соединений, условно с 10 до 80. Но RPS вырос совсем немного, поэтому объяснение типа "стало больше запросов, значит нужно больше коннектов" не совсем сходилось.
Потому что количество занятых коннектов зависит не только от того, сколько запросов приходит, но и от того, как долго каждый запрос удерживает соединение (на…
👍12❤4🔥3🏆1
Signed daria smyr
15 Jun 2026, 17:38 UTC≈1,150 views15 reactions15 Starsread 15 August 2026 Photo
Пришло время наконец-то сравнить, как выглядит fts рядом с другими полнотекстовыми движками.
Ранее я писала серии постов с разборами работы индексаторов radix и HAMT, но остался вопрос, что это даёт на реальных поисковых сценариях.
Поэтому я собрала небольшой benchmark suite в виде отдельного подпроекта и прогнала свой fts рядом с другими гошными индексаторами bleve (не смейтесь) и blue на нескольких типах запросов…
🔥10❤2👍2🏆1
Signed daria smyr
28 May 2026, 00:24 UTC≈1,060 views18 reactions10 Starsread 15 August 2026 Запечатываю крупную структуру индекса в бинарь через mmap, uvarint и delta encoding
Сложно сказать, в какой момент FTS индекс превратился в большой набор гошных структур, но это надо было как то решать, тк восстанавливать весь индекс каждый раз при старте стало не очень.
Что если вынести часть индекса из памяти на диск как отдельный immutable segment - компактный бинарный файл со своим форматом, который собирается …
🔥7👍5❤2🏆2👀2
Signed daria smyr
22 May 2026, 21:46 UTC≈1,010 views17 reactions9 Starsread 15 August 2026 Tombstones и логическое удаление
Одна из вещей, с которыми рано или поздно придется столкнуться в процессе работы с индексером, это удаление документов.
Представим, что у нас есть внутренний реестр документов:
idToOrd:
{
"docA":0,
"docB":1,
"docC":2
}
ordToID:
[
"docA",
"docB",
"docC"
]
Здесь внешний строковый ID документа преобразуется во внутренний порядковый номер (ordinal):
docA ->…
🔥6❤4👍4🦄2😐1
Signed daria smyr
10 May 2026, 22:02 UTC≈1,150 views21 reactions10 Starsread 15 August 2026 Photo
"Explain" plan для FTS
Заметила, что по мере усложнения поискового пайплайна метрика вроде p95 latency стала недостаточной. На одном из последних бенчей время ответа выросло на 30%, но по одной этой цифре невозможно понять, где именно возникла задержка, так как она может проявится как в разборе запроса, отборе кандидатов или ранжировании так и в попытке попасть в fast path.
Снаружи поиск выглядит как один вызов, но…
❤8👍8⚡3🏆2
Signed daria smyr
6 May 2026, 15:03 UTC≈1,210 views19 reactions10 Starsread 15 August 2026 Weak AND: как скипать документы без точного scoring
Много пропадаю, потому что занимаюсь апдейтом движка: поиск по множеству полей, скоринг по TF-IDF/BM25, новый пайплайн парсинга запроса по AST и тд.
Одна из таких оптимизаций - WAND (Weak AND). Она используется в ранжированных поисковых системах, когда нужно быстро получить top-k результатов и не тратить время на документы, которые уже точно не попадут в результат…
🔥12✍2🤯2🏆1👍1👏1
Signed daria smyr
19 Apr 2026, 20:18 UTC≈1,400 views31 reactions11 Starsread 15 August 2026 Photo
Погружение в тему индексов и фильтров точно было не зря...
Помните, я писала про append-only хранилище логов и трейсов Amber?
Чтобы нажать на trace_id и сразу увидеть весь путь запроса между сервисами и логи по каждому шагу. Где используется один бинарь без JVM и без сборки данных по разным инструментам.
Так вот я очень рада, что в пайплайн поиска по сегментам так хорошо зашел фильтр и индексатор из FTS-движка (по…
❤12🔥10👏6🏆2👍1
Signed daria smyr
Showing the 12 most recent of 17 posts we hold for @dariasroom. View and reaction counts are the latest single reading for each post, not a live figure, and a recent post is still accumulating both. A view count marked ≈ was rounded by Telegram before we ever saw it — t.me prints views in full below 1,000 and to three significant figures above, so ≈1,200,000 means somewhere between 1,150,000 and 1,249,999. Unmarked counts are exact. Text is reproduced from the public post preview and truncated for length.