مزیت فنی Beancount در مقایسه با Ledger، hledger و GnuCash
انتخاب یک سیستم حسابداری شخصی شامل مبادلات بین عملکرد، معماری دادهها و قابلیت توسعه است. برای مهندسان و سایر کاربران فنی، انتخاب اغلب به سیستمی منجر میشود که قویترین، قابل پیشبینیترین و قابل برنامهریزیترین پایه را فراهم میکند.
با استفاده از یک گزارش مقایسهای دقیق، مشخصات فنی Beancount را در مقابل رقبای متنباز محبوب آن، Ledger-CLI، hledger و GnuCash، تجزیه و تحلیل میکنیم.
سرعت و عملکرد: معیارهای کمی 🚀
برای هر مجموعه داده جدی، عملکرد غیرقابل مذاکره است. Beancount برای مدیریت دادههای تراکنشهای چندین دهه بدون به خطر انداختن سرعت طراحی شده است. با وجود پیادهسازی در پایتون (نسخه ۲)، تجزیهکننده بسیار بهینهسازی شده آن به طرز چشمگیری کارآمد است.
- Beancount: استفاده در دنیای واقعی نشان میدهد که میتواند دفاتر کل با صدها هزار تراکنش را تقریباً در ۲ ثانیه بارگیری و پردازش کند. استفاده از حافظه متوسط است. تجزیه حدود ۱۰۰ هزار تراکنش، متن منبع را با استفاده از تنها دهها مگابایت رم به اشیاء درون حافظه تبدیل میکند.
- آزمایش فشار ۱ میلیون تراکنش: معیاری با استفاده از یک دفتر کل مصنوعی با ۱ میلیون تراکنش، ۱۰۰۰ حساب و ۱ میلیون ورودی قیمت، تفاوتهای معماری قابل توجهی را نشان داد:
- hledger (Haskell): با موفقیت یک تجزیه و گزارش کامل را در ~۸۰.۲ ثانیه انجام داد و ~۱۲۴۶۵ تراکنش در ثانیه را پردازش کرد و ~۲.۵۸ گیگابایت رم استفاده کرد.
- Ledger-CLI (C++): این فرآیند پس از ۴۰ دقیقه بدون تکمیل شدن خاتمه یافت، احتمالاً به دلیل یک رگرسیون شناخته شده که باعث استفاده بیش از حد از حافظه و CPU با دفاتر کل بسیار پیچیده میشود.
- Beancount: اگرچه در آن آزمایش خاص ۱ میلیون گنجانده نشده است، منحنی عملکرد آن نشان میدهد که این کار را به طور موثر انجام میدهد. علاوه بر این، Beancount نسخه ۳ آینده، با هسته جدید C++ و API پایتون، انتظار میرود که بهبود دیگری در توان عملیاتی ارائه دهد.
- GnuCash (C/Scheme): به عنوان یک برنامه GUI که کل مجموعه دادههای خود را در حافظه بارگیری میکند، عملکرد با اندازه به طور قابل توجهی کاهش مییابد. باز کردن یک فایل XML ~۵۰ مگابایتی (که نشان دهنده بیش از ۱۰۰ هزار تراکنش است) ۷۷ ثانیه طول کشید. تغییر به backend SQLite این زمان را به ~۵۵ ثانیه بهبود بخشید.
نتیجهگیری: Beancount عملکرد استثنایی ارائه میدهد که به طور قابل پیشبینی مقیاسپذیر است، ویژگی مهمی برای مدیریت دادههای بلندمدت. از افت عملکرد مشاهده شده در Ledger و تأخیر محدود به رابط کاربری GnuCash جلوگیری میکند.