یک مدتی هست مشغول کار کردن با یک نرم افزار حسابداری / فروشگاهی به اسم سایان هستم، اینم نرم افزار یک وب سرویس داره که من دارم سعی میکنم محصولاتش رو بخونم و وارد سیستم فروشگاهی خودم با موجودی و تعداد کنم
سایان یک نرم افزار حسابداری همه منظوره داینامیک هست (یعنی امکاناتی داره که شما میتونید باهاش هر نرم افزار حسابداری دیگری بسازید، حتی میتونید با کمی تغییرات تبدیلش کنید به یک نرم افزار فروشگاهی )
نرم افزار های تمام عیار همیشه مشکلات بسیار زیادی رو ایجاد میکنند و چون به صورت تخصصی برای یک بیزینس طراحی نشدند ممکنه شامل خطا ها و یا معماری اشتباه در طراحی باشند
وقتی یک نرم افزار به صورت داینامیک طراحی میشه پس در نتیجه دیتابیس داینامیکی هم داره و در مورد SQL SERVER این یعنی JOIN های بیشتر و عملیات های تو در تو برای محاسبات ساده
برای مثال برای تعریف کردن یک کالا قطعا از یک سند داینامیک استفاده شده است، سند ها در سیستم حسابداری سایان دارای یک شماره عملیات هستند که این عملیات ها کاملا داینامیک در سیستم تعریف میگردد
حالا تصور کنید برای یک کالا سند انبار با پارامتر های مختلف که داینامیک هستند خورده شده است، که شامل قیمت های متفاوت و هزینه های متفاوت بوده است
پس برای تعریف یک کالا پیچیدگی خاصی وجود نداشته است اما برای تعریف سند های آن در قیمت و موجودی (inventory) که در سایان هر گونه تغییرات در کالا معادل یک سند انبار است (برای هر واحد و هر پارامتر مستقلی میتواند یک موجودی جدا وجود داشته باشد)
با این اوصاف تعداد حدودی ۸۰۰۰ کالا در یک سوپرمارکت در سایان ثبت شده است و اکنون من سعی میکنم از متد inventory موجودی و قیمت را بروزرسانی کنم
که البته مجبور هستم با pagination و با سرعت بسیار پایین اینکار را انجام دهم چون هرگونه اعمال فشار نرم افزار های حسابداری موجود در فروشگاه ها را down میکند
نکته خنده دار این است که نرم افزار سایان یک نرم افزار سرور مرکزی ندارد، و هر کلاینت به صورت مستقل فقط به دیتابیس متصل میشود (deadlock ها رو فقط تصور کنید :)) )
پس وب سرویسی که به من دادند هم به عنوان یک کلاینت در کنار دیگر کلاینت ها مستقیم به دیتابیس وصله
البته خودشان این را یک نرم افزار غیر متمرکز تعریف میکنند که البته فکر میکنم در مورد غیر متمرکز هم دچار خطا شده اند و آن را نیز به ابتذال کشیده اند وقتی دیتابیس به عنوان یک مرکز وجود دارد کلمه غیرمتمرکز جوکی بیش نیست
با اینحال بعد از خواندن دوره ای محصولات (در نرم افزار های حسابداری و در معماری درستر باید متدی برای دریافت اخرین تغییرات بر اساس زمان وجود داشته باشد مثلا من بتوانم تمام تغییرات قیمت و موجودی در ۲۰ دقیقه گذشته را دریافت کنم) اما با این وضعیت سرویس بسیار کند inventory که دلیل کند بودنش را متوجه شدیم (تجمیع تمام اسناد داینامیک با متد های join و ریلیشناس دیتابیس)
من مجبور هستم هر ۲۰ دقیقه کل ۸۰۰۰ کالا را دریافت کنم که خواندنش ۲ ساعت طول میکشد :) یعنی ۲ ساعت و ۲۰ دقیقه من برای بروزکردن حتی یک کالا باید منتظر بمانم
البته خوشبختانه متدی برای دیدن قیمت تک کالا داشته اند و من میتوانم در سبد خریدم این کالا را اعتبار سنجی کنم اما با این اوصاف
کاربر بعد از آنکه کالا را به سبد خرید اضافه کرد و قبل از رفتن به صفحه پرداخت تازه دچار یک پیغام خطا میشود (متاسفانه موجودی کالا به اتمام رسید )
سایان یک نرم افزار حسابداری است و هیچ بهینگی در آن برای یک فروشگاه انجام نشده است (بر خلاف هلو و شرکت های دیگر که نرم افزار مخصوص فروشگاهی عرضه کرده اند سایان با بسیار کامل گرایانه بودنش یک سلوشن بسیار بزرگ و کند است همانند آن میماند که بخوایم با یک عدد جرثقیل تکه قندی را از زمین بلند کنیم)
حال اگر در زمین ۸۰۰۰ عدد قند ریخته باشد چه فاجعه ای میشود
لطفا نرم افزار حسابداری را با نرم افزار فروشگاهی یکی نکنید
با عشق دکتر فلفل