Как я добавила групповой коммит в свою LSM-базу на Go и не пожалела

Синхронный WAL очень частое явление в базах данных, делая их durability максимальной. При таком исходе каждый батч записи это вызов fsync, и это дало мне 956k opr/s на 16кб значениях , звучит хорошо, но на самом деле: скорость записи упала в 5 раз . Поскольку в планах создать конкурентноспособное хранилище, я смотрела на то как справлялись с этим замедлением в RocksDB. И, если вы знаете хранилища на Go , где есть групповой коммит , то поделитесь пожалуйста, потому что я не смогла найти такого. В этой статье я расскажу: Что такое групповой коммит на пальцах Почему групповой коммит не для финтеха Как это реализовано у меня Как изменились цифры до и после внедрения Во сколько раз ScoriaDB с group commit быстрее BadgerDB и Pebble. Если вы пишете хранилище, логгер, кэш или просто любите копаться в LSM‑движках — добро пожаловать на борт, нас ждет короткое путешествие Узнать больше

https://habr.com/ru/articles/1043820/

#group_commit #fsync #WAL #LSMдерево #ScoriaDB #BadgerDB #Pebble #бенчмарки #производительность_баз_данных #Go

Как я добавила групповой коммит в свою LSM-базу на Go и не пожалела

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

Хабр
SurrealDB 3.x by the numbers | Blog | SurrealDB

Fresh SurrealDB 3.x benchmarks: 141k ops/s CRUD, scans 164× faster than 2.x, and head-to-head numbers vs. Postgres, Mongo, Neo4j, and Redis.

SurrealDB

[Перевод] Гейминг под Linux становится быстрее, потому что Windows API превращаются в фичи ядра Linux

В марте 2026 года доля пользовательской базы под Linux в Steam впервые перевалила за 5% — рекорд для операционной системы, гейминг для которой был чем-то непривычным два десятка лет. В октябре компания Microsoft объявила дедлайн завершения срока поддержки Windows 10, что заставило многих пользователей искать альтернативы, а Steam Deck втихомолку превратил миллионы людей в Linux-геймеров, что привело к ещё более широкому использованию этой ОС на десктопных машинах. Основной прогресс раньше происходил в ПО под названием Wine: слое трансляции, убеждающем игры для Windows в том, что они запущены под Windows. Steam Play и Steam Deck работают благодаря специализированной версии Wine под названием Proton , разрабатываемой Valve. Многие годы все существенные улучшения гейминга под Linux были связаны с изменениями в самих Wine и Proton. И это по-прежнему так, но всё больше важных изменений вносится и в слое уровнем ниже — внутри ядра Linux. Последним примером этого можно считать NTSYNC — драйвер уровня ядра, обеспечивающий огромный рост производительности по сравнению со старыми версиями Wine и загруженный по умолчанию во все современные Steam Deck.

https://habr.com/ru/articles/1035358/?utm_source=habrahabr&utm_medium=rss&utm_campaign=1035358

#steam #steam_deck #valve #ntsync #игры_под_linux #fsync

Гейминг под Linux становится быстрее, потому что Windows API превращаются в фичи ядра Linux

В марте 2026 года доля пользовательской базы под Linux в Steam впервые перевалила за 5% — рекорд для операционной системы, гейминг для которой был чем-то непривычным два десятка лет. В октябре...

Хабр

[Перевод] Гейминг под Linux становится быстрее, потому что Windows API превращаются в фичи ядра Linux

В марте 2026 года доля пользовательской базы под Linux в Steam впервые перевалила за 5% — рекорд для операционной системы, гейминг для которой был чем-то непривычным два десятка лет. В октябре компания Microsoft объявила дедлайн завершения срока поддержки Windows 10, что заставило многих пользователей искать альтернативы, а Steam Deck втихомолку превратил миллионы людей в Linux-геймеров, что привело к ещё более широкому использованию этой ОС на десктопных машинах. Основной прогресс раньше происходил в ПО под названием Wine: слое трансляции, убеждающем игры для Windows в том, что они запущены под Windows. Steam Play и Steam Deck работают благодаря специализированной версии Wine под названием Proton , разрабатываемой Valve. Многие годы все существенные улучшения гейминга под Linux были связаны с изменениями в самих Wine и Proton. И это по-прежнему так, но всё больше важных изменений вносится и в слое уровнем ниже — внутри ядра Linux. Последним примером этого можно считать NTSYNC — драйвер уровня ядра, обеспечивающий огромный рост производительности по сравнению со старыми версиями Wine и загруженный по умолчанию во все современные Steam Deck.

https://habr.com/ru/articles/1035358/

#steam #steam_deck #valve #ntsync #игры_под_linux #fsync

Гейминг под Linux становится быстрее, потому что Windows API превращаются в фичи ядра Linux

В марте 2026 года доля пользовательской базы под Linux в Steam впервые перевалила за 5% — рекорд для операционной системы, гейминг для которой был чем-то непривычным два десятка лет. В октябре...

Хабр
Ah, the daring heroes at #FractalBits have valiantly declared war on fsync! 🚫💾 They’ve concocted a magical brew of preallocation and ODIRECT, sprinkled with #SSD pixie dust, to create a #storage engine that defies danger yet stands valiantly alone like the last kid picked for dodgeball. 🏆🥴
https://fractalbits.com/blog/remove-fsync/ #fsync #innovation #technology #heroics #HackerNews #ngated
Removing fsync from our local storage engine | FractalBits Blog

How we used pre-allocation, O_DIRECT, and an SSD-aware journal to keep our local storage engine's writes crash-consistent without fsync.

[Перевод] MariaDB 12.3: binlog внутри InnoDB

Коротко для ленивых В MariaDB 12.3 binlog можно хранить внутри InnoDB через binlog_storage_engine=innodb . Главный эффект: вместо двух fsync() на commit остаётся один, поэтому на write-heavy нагрузке резко растут TPS и снижается tail latency. В тестах из статьи прирост на полном durability-профиле составил примерно 2.4x–3.3x . Backup, restore и ресинк реплик становятся проще, потому что binlog и данные теперь консистентны на уровне одного механизма хранения. Цена за это: обязателен GTID, Galera пока не поддерживается, а innodb_log_file_size нужно подбирать внимательнее из-за роста объёма redo. Если у вас обычная схема primary + async replica на InnoDB, эту возможность точно стоит хотя бы протестировать.

https://habr.com/ru/articles/1011298/

#MariaDB_123 #InnoDB #binlog #GTID #репликация #производительность_SQL #crash_recovery #fsync #OLTP

MariaDB 12.3: binlog внутри InnoDB

Полноформатная адаптация для Habr по мотивам статьи Adrien Obernesser «MariaDB 12.3 – Binlog Inside InnoDB». Коротко для ленивых В MariaDB 12.3 binlog можно хранить внутри InnoDB через...

Хабр
MariaDB 12.3 對 InnoDB 的大改進

看到 Mark Callaghan 寫的「MariaDB innovation: binlog_storage_engine」、「MariaDB innovation: binlog_storage_engine, small server, Insert Benchmark」這篇,裡面提到了 MariaDB 12.

Gea-Suan Lin's BLOG

SQLite (with WAL) doesn't do fsync on each commit under default settings | Hacker News

LinkSQLite WAL 模式下的 fsync 預設與實務影響分析
https://www.sqlite.org/pragma.html#pragma_synchronous

📌 Summary:
本文主要探討 SQLite 在啟用 Write-Ahead Logging(WAL)模式時,
PRAGMA synchronous 設定與 fsync 行為之間的關係,以及不同作業系統和編譯環境下的預設差異。SQLite 的 WAL 模式能提升寫入效能,但在預設的 synchronous=NORMAL 狀態下,交易提交並不會在每次操作時都呼叫 fsync,導致系統崩潰或斷電時可能回滾部分已提交交易。相對地,設定為 FULL 會增加交易耐久性,確保每次提交後都執行同步操作,降低資料遺失風險。文中以 macOS 內建 sqlite 與 Homebrew 版本為例,指出兩者在此設定上的不同,且編譯階段的宏定義(SQLITE_DEFAULT_SYNCHRONOUSSQLITE_DEFAULT_WAL_SYNCHRONOUS)通常預設為 FULL,但發行版或包裝方式可能改變預設,產生行為差異。文章並輔以 Hacker News 社羣討論,引伸對於資料庫耐久性預設的安全性疑慮、不同檔案系統、fsync 性能影響以及應用場景需求的範例分析,提醒使用者必須理解底層配置與預設差異,並根據實務需求調整參數,而非盲目依賴默認設定。

🎯 Key Points:
🔧 SQLite WAL 模式與同步機制:
★ WAL 模式預設 journal mode 為 WAL,優化寫入效能;
PRAGMA synchronous 控制 fsync 行為,影響資料耐久性與系統穩定性;
synchronous=NORMAL(數值1)表示不對每次提交呼叫 fsync,僅於檢查點前後同步,可能導致部分交易因斷電丟失;
synchronous=FULL(數值2)確保每次交易提交後同步 WAL 檔案,提升耐久性;

💻 系統與編譯差異:
★ macOS 內建 sqlite3 版本默認為 WAL 模式下同步為
NORMAL
★ Homebrew 版本默認為
FULL,顯示編譯宏設定差異;
★ 編譯預設宏
SQLITE_DEFAULT_SYNCHRONOUSSQLITE_DEFAULT_WAL_SYNCHRONOUS 皆預設值為 FULL,但發行包裝可能自行調整;
★ 不同 Linux 發行版 Docker 映像大多維持
FULL 為預設;

🗣 社羣討論與應用影響:
★ 斷電後資料持久性及交易一致性成為關鍵,尤其金融或加密貨幣等重要場景;
★ 許多應用為提升效能採用
NORMAL,但犧牲了部分交易的耐久保障;
★ fsync 操作較耗費資源且影響性能,故預設採折衷策略;
★ 使用者應明確檢視並調整關鍵設定以符合應用需求,避免默認帶來資料遺失風險;
★ 針對 Apple 平臺 fsync 行為存在特殊處理,如使用 F_FULLFSYNC 或 F_BARRIERFSYNC ;
★ SQLite 不同默認設置的不透明性亦可能導致開發者誤解資料庫的安全保證;

🔖 Keywords:
#SQLite #WAL模式 #PRAGMA_synchronous #fsync #資料耐久性

SQLite (with WAL) doesn't do `fsync` on each commit under default settings | Hacker News

🌖 SQLite (WAL 模式) 預設不對每次提交執行 fsync
➤ 深入解析 SQLite WAL 模式的資料持久性與同步機制
https://avi.im/blag/2025/sqlite-fsync/
這篇文章探討了 SQLite 在寫入日誌模式 (WAL) 下,預設同步設定 (NORMAL) 並不保證每次交易提交時都執行 fsync 的行為。作者指出,這可能導致在斷電或系統崩潰時資料遺失。文章進一步說明,若要確保每次提交都執行 fsync 以提高資料持久性,需將 `synchronous` PRAGMA 設定為 `FULL`。作者也修正了先前對 macOS 預設行為的誤解,並提及編譯時選項 `SQLITE_DEFAULT_SYNCHRONOUS` 可決定預設值。
+ 感謝作者的詳細解釋,終於釐清了 WAL 模式下的同步問題,原來預設並不總是那麼安全。
+ macOS 上 SQLite 的預設行為確實會讓人誤會,幸好有作者的更新和對編譯選項的說明。
#資料庫 #SQLite #WAL #fsync #資料持久性
SQLite (with WAL) doesn't do `fsync` on each commit under default settings - blag

SQLite when used with WAL doesn’t do fsync unless specified.

SQLite (with WAL) doesn't do `fsync` on each commit under default settings

https://avi.im/blag/2025/sqlite-fsync/

#HackerNews #SQLite #WAL #fsync #performance #database #commit #storage

SQLite (with WAL) doesn't do `fsync` on each commit under default settings - blag

SQLite when used with WAL doesn’t do fsync unless specified.