Hacker News Digest

Тег: #mongodb

Постов: 8

Why engineers can't be rational about programming languages (spf13.com)

Инженеры часто иррационально подходят к выбору языков программирования, принимая решения на основе идентичности, эмоций и эго, а не технических преимуществ. Автор делится историей о компании Takkle, где опытный CTO инициировал переход с PHP на Perl, что привело к девятимесячной задержке, увеличению расходов с $200K до $500K в месяц и, в конечном итоге, к банкротству компании. Несмотря на то, что PHP был «достаточно хорош» для Facebook, подобного решения не приняли.

В течение своей карьеры автор наблюдал повторяющуюся эту модель в Google, MongoDB и других компаниях. Он описывает случай, когда VP Engineering представил руководству обоснование выбора Rust, хотя Go объективно соответствовал заявленным критериям лучше. Оказалось, что другие языки даже не рассматривались — решение было основано на хайпе. Автор подчеркивает, что при обсуждении языков программирования всегда происходит два диалога: видимый технический и невидимый, связанный с идентичностью инженера.

by spf13 • 03 ноября 2025 г. в 17:08 • 91 points

ОригиналHN

#php#perl#rust#go#facebook#google#mongodb

Комментарии (107)

  • Обсуждение показало, что выбор языка программирования часто определяется не техническими, а социальными и экономическими факторами.
  • Участники подчеркнули, что переписывание продукта ради смены языка почти всегда плохая идея, если только не меняются фундаментальные условия.
  • Сообщество отметило, что выбор языка часто сводится к тому, какие инженеры доступны, а не к тому, какой язык лучше всего подходит для задачи.
  • Некоторые комментаторы подчеркнули, что выбор языка может быть оправдан, если это позволяет привлечь лучших инженеров, но что это редко оправдывает переписывание всего продукта.
  • В целом, обсуждение подтвердило, что выбор языка программирования должен быть рациональным решением, основанным на фактах, а не на идентичности или вдохновении.

Show HN: ChartDB Agent – Cursor for DB schema design (app.chartdb.io)

ChartDB — это инструмент для визуализации схем баз данных, который помогает разработчикам и аналитикам лучше понимать структуру данных. Он автоматически генерирует интерактивные диаграммы на основе существующих баз данных, поддерживая популярные СУБД, такие как PostgreSQL, MySQL и MongoDB. Это упрощает проектирование, документирование и совместную работу над сложными системами.

Среди ключевых возможностей — автоматическое обновление схем при изменениях в БД, экспорт в форматы PNG или SVG, а также интеграция с инструментами вроде Git для версионного контроля. Практический плюс: визуализация помогает быстро находить связи между таблицами, что ускоряет отладку и оптимизацию запросов.

by guyb3 • 01 октября 2025 г. в 13:38 • 111 points

ОригиналHN

#postgresql#mysql#mongodb#database#erd#sql#llm#schema-design#data-visualization#git

Комментарии (34)

  • Представлен инструмент ChartDB с открытым исходным кодом для проектирования схем баз данных через текстовые промпты с визуализацией в виде ERD-диаграмм.
  • Пользователи отмечают удобный интерфейс и потенциальную пользу для быстрого прототипирования, но критикуют читаемость соединений и отсутствие обсуждения для уточнения требований.
  • Высказаны опасения по поводу стоимости бесплатного использования ИИ, точности генерируемых схем (в т.ч. устаревшая информация о СУБД) и способности инструмента масштабировать решения.
  • Отмечено, что многие ИИ-инструменты и так умеют работать с БД, генерировать SQL и диаграммы, поэтому ценность ChartDB видится в автоматизации и удобстве.
  • Запросы на дополнительные функции: предпросмотр миграций, генерация SQL-запросов под use case, интеграция веб-интерфейса и расширение на проектирование классов.

A SQL Heuristic: ORs Are Expensive (ethanseal.com)

Оператор OR в SQL-запросах может быть неожиданно дорогим из-за сложностей планирования запросов. Например, запрос с OR для двух столбцов с индексами может выполняться более 100 мс на миллионе записей, в то время как эквивалентный запрос с использованием AND и подзапросов сокращает время до менее 1 мс. Это происходит потому, что оптимизатору сложно эффективно объединять результаты по индексам для условий OR, особенно при наличии дополнительных фильтров или сортировок.

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

by ethanseal • 29 сентября 2025 г. в 13:29 • 147 points

ОригиналHN

#sql#query-optimization#database-performance#indexing#orm#mongodb#machine-learning

Комментарии (59)

  • Обсуждаются проблемы производительности SQL-запросов с оператором OR, особенно при использовании предикатов по разным колонкам, и предлагается ручная оптимизация через переписывание в UNION ALL.
  • Поднимается вопрос о сложности работы оптимизатора запросов, который может неправильно оценить количество строк из-за устаревшей статистики, что приводит к резкому росту сложности выполнения.
  • Упоминаются различные техники индексирования (например, ESR для MongoDB) и важность правильного проектирования таблиц и индексов для избежания проблем с производительностью.
  • Отмечается, что ORM часто генерируют неоптимальные запросы, и подчеркивается необходимость ручной проверки и настройки SQL, особенно в высоконагруженных системах.
  • Обсуждается возможность применения машинного обучения и расширенной статистики в оптимизаторах запросов для улучшения оценки кардинальности и выбора более эффективных планов выполнения.

Rug pulls, forks, and open-source feudalism (lwn.net)

Rug-pull и вилки: кто кого в OSS

  • В облаке всё решают гиганты (AWS, GCP, Azure); разработчики и пользователи — без прав.
  • Компания-владелец проекта может «рвануть коврик»: сменить лицензию на закрытую, чтобы загнать облачных конкурентов.
  • Пример: Elastic → SSPL, MongoDB → SSPL, Sentry → новая лицензия.
  • Ответ — вилка (fork), но она требует людей и денег; без спонсора умирает.
  • AWS форкнул Elasticsearch → OpenSearch: набрал контрибьюторов с нуля, теперь живёт.
  • Puppet ушёл в Perforce и закрыл код → родилась OpenVox.
  • Вывод: однокомпаночные проекты рискованны; выбирайте те, где власть распределена, или сразу готовьтесь вилковать.

by pabs3 • 06 сентября 2025 г. в 05:59 • 239 points

ОригиналHN

#aws#gcp#azure#elastic#mongodb#sentry#open-source#licensing

Комментарии (115)

  • CLA = право перелицензировать → «rug pull» возможен; DCO такого не даёт.
  • Elasticsearch, Redis, Mongo и др. перелицензировались не от банкротства, а чтобы ограничить конкурентов и поднять доход.
  • Пользователи чувствуют «предательство»: проект начинали под FOSS-лицензией, привлекли вклад и клиентов, потом закрыли код.
  • Форки (OpenSearch, Valkey) спасают, но требуют новой инфраструктуры и сообщества; большинство просто делают «снапшот» и уходят.
  • Проблема устойчивости: без денег проект умрёт, но нынешняя модель дарения дарит прибыль крупным облакам, а не разработчикам.

SQL needed structure (scattered-thoughts.net)

  • Данные на странице IMDB иерархические: фильм → режиссёр, жанры, актёры → персонажи.
  • Иерархия двунаправленная: фильм→актеры и актер→фильмы.
  • Реляционная БД хранит всё в плоских таблицах; при выводе строим нужную иерархию.
  • Ручная сборка — утомительна, это «объектно-реляционное несоответствие».

SQL не умеет выдавать структуру
Цель: JSON вида

{"title":"Baby Driver","director":["Edgar Wright"],"writer":["Edgar Wright"],
 "genres":["Action","Crime","Drama"],
 "actors":[{"name":"Ansel Elgort","characters":["Baby"]}, …]}

Пошаговые запросы:

-- название
SELECT primaryTitle FROM title WHERE tconst='tt3890160';

-- режиссёры
SELECT p.primaryName
FROM title t
JOIN principal pr ON t.tconst=pr.tconst
JOIN person   p  ON pr.nconst=p.nconst
WHERE t.tconst='tt3890160' AND pr.category='director';

-- сценаристы
... AND pr.category='writer';

-- актёры
SELECT p.nconst, p.primaryName
FROM title t
JOIN principal pr ON t.tconst=pr.tconst
JOIN person   p  ON pr.nconst=p.nconst
WHERE t.tconst='tt3890160' AND pr.category='actor';

-- персонажи
SELECT pc.nconst, pc.character
FROM title t
JOIN principal pr          ON t.tconst=pr.tconst
JOIN principal_character pc ON pr.nconst=pc.nconst
WHERE t.tconst='tt3890160';

Попытка объединить всё в один запрос даёт декартово произведение (режиссёры×сценаристы) и пропуск записей при отсутствии одной из ролей. Поэтому приходится делать множество отдельных запросов и собирать итоговую структуру на клиенте.

by todsacerdoti • 05 сентября 2025 г. в 06:43 • 94 points

ОригиналHN

#sql#json#postgresql#object-relational-impedance-mismatch#relational-databases#hierarchical-data#mongodb#graphql#orm#nosql

Комментарии (100)

  • Обсуждение крутится вокруг «объектно-реляционного несоответствия»: SQL хорошо хранит нормализованные данные, но плохо отдаёт их иерархически.
  • Многие считают, что виноват сам язык: нет встроенных вложенных отношений, агрегация в JSON делается громоздко, JOIN-ы приходится «переделывать» в коде.
  • Часть участников предлагает решать задачу внутри СУБД: Postgres-функции json_agg, LATERAL-подзапросы, денормализованные VIEW и «JSON-проекции».
  • Другие уверены, что проблема надумана: деревья в SQL вполне строятся (adjacency list, nested sets, closure table), просто нужно знать приёмы; ORM и NoSQL лишь откладывают боль.
  • Упоминаются альтернативные пути: GraphQL-слой поверх SQL, графовые СУБД, документные хранилища (MongoDB), event-sourcing с CQRS, но каждый имеет свои trade-off.

Offline-First Landscape – 2025 (marcoapp.io)

Почему мы отказались от WatermelonDB

  • IndexedDB тормозит: WatermelonDB держит всю БД в памяти через LokiJS, что при 100 МБ+ данных недопустимо.
  • Синхронизация хрупкая: клиент обязан сначала вытянуть данные, иначе мутации могут затереться.
  • Проект замедлился: PR с чанковой загрузкой висит месяцами, активность упала.
  • Web-ограничения: IndexedDB единственное постоянное хранилище в браузере, и все реализации страдают от его скорости.

Что мы искали

  • Полноценная работа офлайн: чтение, удаление, ответ, сортировка писем без сети.
  • Сотни МБ и миллионы строк с первого запуска — задача из топ-1 %.
  • Кроссплатформенность: web + натив, общий знаменатель — браузер.
  • Отказались от идеи «база-независимый API»: готовы интегрироваться на уровне Postgres, если это даст надёжность.

Первые кандидаты

Библиотека Плюсы Минусы
WatermelonDB Open-source, проверен временем Память, тормоза, слабая поддержка
PowerSync Есть self-host Требует кластер MongoDB + изменения Postgres, кейсы только демо
ElectricSQL Переписывают, односторонняя синхронизация, требует Postgres

Итог
Альфа-версия на WatermelonDB работала, но к ноябрю стало ясно: для «тяжёлого» офлайна нужно что-то совсем другое. Мы начали поиск «новой волны» решений, отбросив все предубеждения.

by Onavo • 29 августа 2025 г. в 16:20 • 107 points

ОригиналHN

#indexeddb#lokijs#postgresql#mongodb#watermelondb#powersync#electricsql#replicache#oramadb#opfs

Комментарии (63)

  • Автор поста (isaachinman) доволен Replicache+Orama, ждёт стабильности Zero, считает InstantDB созревшей, а Triplit теперь просто open-source.
  • Критика: почти все решения (WatermelonDB, ElectricSQL, InstantDB, Convex) всё равно сидят на IndexedDB, который сам по себе «хак» и в Chrome построен на SQLite.
  • Появляется надежда на Origin Private File System (OPFS) и WASM-SQLite, но пока боятся коррупций и нестабильности.
  • Разработчики жалуются: мало примеров разрешения семантических конфликтов, ограниченные типы SQLite, сложности больших данных (ГБ+) и неясность, где open-source, а где нет.

Show HN: ChartDB Cloud – Visualize and Share Database Diagrams (app.chartdb.io)

ChartDB — инструмент для интерактивной визуализации схем БД.
Поддерживает PostgreSQL, MySQL, MariaDB, SQL Server, SQLite, CockroachDB, MongoDB.

Ключевые возможности

  • Импорт схемы одним кликом из любой поддерживаемой СУБД.
  • Авто-раскладка таблиц и связей; ручное перемещение.
  • Экспорт в форматы PNG, SVG, PDF.
  • Режим «одной страницы» для быстрого просмотра.
  • Поиск и фильтрация по названию таблицы или столбца.
  • Тёмная и светлая темы.

Быстрый старт

  1. Открыть chartdb.io.
  2. Нажать «Import from DB», вставить строку подключения или SQL-дамп.
  3. Получить готовую схему за секунды.

by Jonathanfishner • 21 августа 2025 г. в 13:01 • 82 points

ОригиналHN

#postgresql#mysql#mariadb#sqlserver#sqlite#cockroachdb#mongodb#database#visualization#erd

Комментарии (12)

  • Некоторые команды продолжают рисовать ERD и документировать именно схему БД, особенно при проектировании новых фич и онбординге.
  • Другие полагаются на абстракции вроде ORM/DDD и считают диаграммы избыточными, особенно для типовых SaaS с generic auth и payment.
  • Инструменты вроде dbdiagram.io, Lucidchart и ChartDB спросом пользуются, но часто ломаются при >15 таблиц или требуют изучения нового UI.
  • Сторонники диаграмм аргументируют: «базы живут дольше абстракций», а отсутствие документации — потеря для индустрии.

How we replaced Elasticsearch and MongoDB with Rust and RocksDB (radar.com) 🔥 Горячее

HorizonDB — новая гео-БД на Rust, заменившая Elasticsearch и MongoDB.
Обрабатывает 1 млрд вызовов/день, 1 000 QPS на ядро, 50 мс прямого и <1 мс обратного геокодирования.

Проблемы старого стека

  • Elasticsearch: шардирование, дорогие батчи, отсутствие отката.
  • MongoDB: нет нормального bulk-импорта, переподбор ресурсов, сложный откат.

Архитектура HorizonDB

  • Однопроцессный многопоточный бинарник.
  • Данные Spark → S3 → RocksDB (версионные ассеты).
  • Индексы: S2 (гео), Tantivy (поиск), FST (префиксы), LightGBM/FastText (ML-ранжирование).

Почему Rust

  • Скомпилирован, без GC, предсказуемая латентность.
  • Абстракции высокого уровня, pattern matching.
  • Один процесс вместо Node.js-кластера → экономия памяти.

Ключевые компоненты

  • RocksDB — быстрая запись/чтение с SSD.
  • S2 — O(1) point-in-polygon через квадродерево.
  • FST — компрессия префиксов, кэш «happy path» в МБ.
  • Tantivy — встроенный инвертированный индекс, избегаем сетевого Elasticsearch.

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

by j_kao • 08 августа 2025 г. в 12:57 • 258 points

ОригиналHN

#rust#rocksdb#mongodb#elasticsearch#s2#tantivy#lightgbm#fasttext

Комментарии (84)

  • Пост вызывает много вопросов: детали шардирования, отказоустойчивость, latency и open-source-статус не раскрыты.
  • Альтернативы: Typesense, DuckDB+spatial, Quickwit/Tantivy — всё open-source и уже показывает высокую производительность.
  • RocksDB хвалят за надёжность и производительность, но кто-то вспоминает старые проблемы LevelDB.
  • LMDB/OSM Express тоже предлагают более лёгкое решение для геопоиска.
  • Многие считают, что 95 % задач решаются обычным Postgres/SQLite, а «заменить ES» сейчас модный лозунг.