Technická výhoda Beancountu oproti Ledgeru, hledgeru a GnuCashu
Výber osobného účtovníckeho systému zahŕňa kompromisy medzi výkonom, architektúrou dát a rozšíriteľnosťou. Pre inžinierov a iných technických používateľov sa výber často obmedzuje na systém, ktorý poskytuje najrobustnejší, predpovedateľný a programovateľný základ.
Na základe podrobnej porovnávacej správy si rozoberme technické špecifiká Beancountu oproti jeho populárnym open-source konkurentom: Ledger-CLI, hledger a GnuCash.
Rýchlosť a výkon: Kvantitatívne benchmarky 🚀
Pre akýkoľvek seriózny súbor dát je výkon nevyhnutný. Beancount je navrhnutý tak, aby spracoval desaťročia transakčných dát bez kompromisov v rýchlosti. Napriek tomu, že je implementovaný v Pythone (v2), jeho vysoko optimalizovaný parser je pozoruhodne efektívny.
- Beancount: Reálne používanie ukazuje, že dokáže načítať a spracovať účtovné knihy so stovkami tisíc transakcií za približne 2 sekundy. Využitie pamäte je mierne; parsovanie ~100 000 transakcií konvertuje zdrojový text na objekty v pamäti s použitím iba desiatok megabajtov RAM.
- Stresový test 1 milióna transakcií: Benchmark s použitím syntetickej účtovnej knihy s 1 miliónom transakcií, 1 000 účtami a 1 miliónom cenových záznamov odhalil významné architektonické rozdiely:
- hledger (Haskell): Úspešne dokončil úplné parsovanie a report za ~80,2 sekundy, pričom spracoval ~12 465 transakcií/s a využil ~2,58 GB RAM.
- Ledger-CLI (C++): Proces bol ukončený po 40 minútach bez dokončenia, pravdepodobne kvôli známej regresii, ktorá spôsobuje nadmerné využitie pamäte a CPU pri vysoko komplexných účtovných knihách.
- Beancount: Hoci nebol zahrnutý v tomto konkrétnom teste 1 milióna transakcií, jeho výkonnostná krivka naznačuje, že by túto úlohu zvládol efektívne. Okrem toho sa očakáva, že nadchádzajúci Beancount v3 s novým jadrom C++ a Python API prinesie ďalšie rádové zlepšenie priepustnosti.
- GnuCash (C/Scheme): Ako GUI aplikácia, ktorá načítava celý svoj dátový súbor do pamäte, sa výkon s veľkosťou výrazne zhoršuje. Otvorenie ~50 MB XML súboru (predstavujúceho viac ako 100 000 transakcií) trvalo 77 sekúnd. Prechod na backend SQLite to len mierne zlepšil na ~55 sekúnd.
Záver: Beancount poskytuje výnimočný výkon, ktorý sa predvídateľne škáluje, čo je kľúčová vlastnosť pre dlhodobú správu dát. Vyhýba sa výkonnostným problémom, ktoré sa vyskytujú v Ledgeri, a latencii viazanej na UI v GnuCash.
Architektúra dát: Obyčajný text vs. Nepriehľadné databázy 📄
Spôsob, akým systém ukladá vaše dáta, určuje jeho transparentnosť, prenositeľnosť a trvanlivosť. Beancount používa čistý, ľudsky čitateľný formát obyčajného textu, ktorý je pre technických používateľov lepší.
- Kompaktný a efektívny: Súbor Beancount so 100 000 transakciami má iba ~8,8 MB. Je to kompaktnejšie ako ekvivalentný súbor Ledger (~10 MB), čiastočne preto, že syntax Beancountu umožňuje odvodiť konečnú vyrovnávaciu sumu v transakcii, čím sa znižuje redundancia.