تغییرات انجام شده در طی یک معامله تا زمان انجام معامله در پایگاه داده ظاهر نمی شوند. این کار با فراخوانی روش تعهد () شیء معامله فعلی انجام می شود ، جایی که دومی از روش GET () مدیر معامله فعلی بدست می آید. اگر از مدیر معاملات پیش فرض استفاده می شود ، پس از آن Transaction. commit () کافی است.
به همین ترتیب ، با استفاده از روش abort () شیء معامله فعلی ، یا به سادگی معامله. abort () در صورت استفاده از مدیر معاملات پیش فرض ، می توان یک معامله را صریحاً سقط کرد.
قبل از ZODB 3. 3 ، اگر یک تعهد شکست خورده باشد (به معنای فراخوان تعهد () استثناء شده است) ، معامله به طور ضمنی سقط شد و یک معامله جدید به طور ضمنی آغاز شد. اگر این استثنا سرکوب شود ، این می تواند بسیار تعجب آور باشد ، و به خصوص اگر تعهد ناکامی یکی در دنباله ای از تعهدات تقسیم باشد.
بنابراین ، با شروع ZODB 3. 3 ، در صورت عدم موفقیت تعهد ، تمام تلاش های بیشتر برای ارتکاب ، پیوستن یا ثبت نام در معامله ZODB. PoseXception. TransactionFailEderror. شما باید صریحاً یک معامله جدید را شروع کنید ، یا با فراخوانی روش abort () معامله فعلی ، یا با فراخوانی روش شروع () مدیر معامله فعلی.
تفکیک فرعی
تقسیم بندی ها را می توان در یک معامله ایجاد کرد. هر تقسیم بندی می تواند به صورت جداگانه انجام شود و سقط شود ، اما تغییرات در یک تقسیم بندی تا زمانی که معامله حاوی انجام نشود ، واقعاً مرتکب نمی شوند.
هدف اصلی از تقسیمات ، کاهش استفاده از حافظه از معاملات است که تعداد بسیار زیادی از اشیاء را لمس می کند. معامله ای را در نظر بگیرید که در طی آن 200000 شیء اصلاح شده است. تمام اشیاء اصلاح شده در یک معامله واحد باید تا زمان انجام معامله در حافظه باقی بمانند ، زیرا ZODB نمی تواند آنها را از حافظه نهان دور دور کند. این به طور بالقوه می تواند استفاده از حافظه را بسیار بزرگ کند. با استفاده از زیرساخت ها ، می توان در فواصل زمانی هر 10،000 شیء انجام داد. سپس این 10،000 شیء برای ذخیره سازی دائمی نوشته شده و از حافظه نهان تا فضای بیشتری می توان پاکسازی کرد.
برای ارتکاب یک تقسیم به جای یک معامله کامل ، یک مقدار واقعی را به روش تعهد () یا سقط () شیء معامله منتقل کنید.
تقسیم جدید به طور خودکار با تعهد موفقیت آمیز یا سقط جنین در مورد تقسیم قبلی آغاز می شود.
خنثی کردن تغییرات ¶
برخی از انواع پشتیبانی از ذخیره سازی حتی پس از انجام آن ، معامله را خنثی می کنند. می توانید با فراخوانی روش SupportSundo () نمونه DB ، این مورد را بیان کنید ، که اگر ذخیره سازی زیربنایی از خنثیسازی پشتیبانی می کند ، درست باز می گردد. از طرف دیگر می توانید با روش SupportSundo () در نمونه ذخیره سازی اساسی تماس بگیرید.
اگر یک بانک اطلاعاتی از خنثیسازی پشتیبانی کند ، روش Undolog (شروع ، پایان [، عملکرد]) () در نمونه DB ورود به معاملات گذشته را برمی گرداند و معاملات بین زمان شروع و پایان را باز می گرداند ، در ثانیه از دوره اندازه گیری می شود. در صورت وجود ، Func تابعی است که به عنوان فیلتر در معاملات بازگرداندن عمل می کند. این یک فرهنگ لغت به نمایندگی از هر معامله منتقل شده است ، و فقط معاملاتی که عملکرد آن را به درستی بازگرداند ، در لیست معاملات برگشتی به تماس گیرنده Undolog () گنجانده می شود. فرهنگ لغت حاوی کلیدهایی برای خصوصیات مختلف معامله است. مهمترین کلیدها شناسه ، برای شناسه معامله و زمان ، برای زمانی که معامله انجام شده است.
برای ذخیره توضیحات و نام کاربری در یک تعهد ، معامله فعلی را دریافت کرده و برای ذخیره توضیحات ، و روش SetUser (user_name) () برای ذخیره نام کاربری با روش Note (Text) () تماس بگیرید. در حالی که SetUser () نام کاربری فعلی را بازنویسی می کند و آن را با مقدار جدید جایگزین می کند ، روش Note () همیشه متن را به توضیحات معامله اضافه می کند ، بنابراین می توان چندین بار برای ورود به چندین تغییر مختلف در دوره یک واحد فراخوانده شد. معامله.
برای خنثی کردن یک معامله ، با روش db. undo (id) () تماس بگیرید و شناسه معامله را برای خنثی کردن آن منتقل کنید. اگر معامله نتواند از بین برود ، یک استثناء ZODB. PoseXception. undoError با پیام "معامله غیر قابل قبول" مطرح می شود. معمولاً این اتفاق می افتد زیرا معاملات بعدی اشیاء تحت تأثیر معامله ای را که سعی در خنثی کردن آنها دارید ، اصلاح می کند.
پس از تماس با UNDO () باید معامله را انجام دهید تا در واقع Undo اعمال شود. 1 در روند خنثیسازی یک جلوه وجود دارد. موضوعی که از آن استفاده می کند ، ممکن است تغییرات موجود در شی را تا زمانی که اتصال را صدا نمی کند ، مشاهده نکند.
نسخه ها
از نسخه ها باید جلوگیری شود. آنها مستهلک می شوند و با رویکردهای بهتر برای معاملات طولانی مدت جایگزین می شوند.
در حالی که بسیاری از ترانزیت ها می توانند در یک معامله معمولی واحد قرار بگیرند ، همچنین می توان بسیاری از معاملات منظم را در یک معامله طولانی مدت به نام نسخه ای در اصطلاحات ZODB درج کرد. در داخل یک نسخه ، هر تعداد معاملات را می توان ایجاد و مرتکب یا بازگرداند ، اما تغییرات موجود در یک نسخه برای سایر اتصالات با همان ZODB قابل مشاهده نیست.
همه نسخه های پشتیبانی از نسخه های پشتیبانی نمی کنند ، اما می توانید با استفاده از روش پشتیبانی () از نمونه DB ، توانایی نسخه را آزمایش کنید ، که اگر ذخیره سازی زیرین از نسخه سازی پشتیبانی می کند ، درست باز می گردد.
یک نسخه را می توان هنگام ایجاد نمونه اتصال با استفاده از روش db. open ([*نسخه*]) () انتخاب کرد. آرگومان نسخه باید رشته ای باشد که به عنوان نام نسخه مورد استفاده قرار می گیرد.
سپس معاملات را می توان با استفاده از این اتصال نسخه انجام داد. سایر اتصالات که نسخه ای را مشخص نمی کنند یا نام نسخه دیگری را ارائه نمی دهند ، تغییراتی را که در نسخه نامگذاری شده نسخه کار شده انجام می شود ، مشاهده نمی کنند. برای تعهد یا سقط جنین ، که یا تغییرات را برای همه مشتری ها قابل مشاهده خواهد کرد یا آنها را به عقب برگرداند ، با روش های db. commitversion () یا db. abortversion () تماس بگیرید. xxx استدلال های منبع و Dest برای چیست؟
ZODB هیچ تلاشی برای آشتی دادن تغییرات بین نسخه های مختلف انجام نمی دهد. در عوض ، نسخه اول که یک شی را اصلاح می کند ، قفل آن شی را به دست می آورد. تلاش برای اصلاح شی از نسخه متفاوت یا از یک اتصال غیرقابل توصیف باعث می شود Zodb. PoseXception. VersionLockError مطرح شود:
استثنا شناسه شیء قفل شده و نام نسخه ای را که قفل روی آن است ، فراهم می کند.
برنامه های ZODB چند رشته ای ¶
به پایگاه داده های ZODB از برنامه های Python Multithreaded قابل دسترسی است. نمونه های ذخیره سازی و DB را می توان در بین چندین موضوع به اشتراک گذاشت ، تا زمانی که نمونه های اتصال فردی برای هر موضوع ایجاد شود.
در واقع دو روش مختلف وجود دارد که یک ذخیره سازی می تواند ویژگی undo را پیاده سازی کند. بسیاری از انبارها که با ZODB حمل می شوند از فرم معامله ای از خنثیسازی که در متن اصلی شرح داده شده است استفاده می کنند. برخی از انبارها ممکن است از یک خنثیسازی غیر متعاقب استفاده کنند ، باعث می شود بلافاصله تغییرات قابل مشاهده باشد.
© کپی رایت 2009-2022 ، بنیاد Zope Revision 04Fe8278.
نسخه های آخرین بارگیری های پایدار PDF HTML EPUB در خواندن Docs Project Home Home میزبانی اسناد رایگان تهیه شده توسط Read The Docs.
خبرهای فارکس...
ما را در سایت خبرهای فارکس دنبال می کنید
برچسب :
نویسنده : شهره لرستانی
بازدید : <-PostHit->
تاريخ : شنبه
7 مرداد
1402 ساعت: 13:07