MicroStream یک لایه تداوم گراف شی جاوا مدرن است که از طریق یک رویکرد بسیار برتر برای سریال سازی، عملکرد بالایی را به دست می آورد. بیا یک نگاهی بیندازیم.
MicroStream یک رویکرد بسیار جالب و حتی جسورانه برای ماندگاری داده ها در برنامه های جاوا است. پیشنهاد میکند از پیچیدگی سرور-دادهاستور بهطور کامل کنار گذاشته شود و در عوض یک لایه پایداری شی که در داخل خود برنامه اجرا میشود، ارائه شود. اوراکل MicroStream را در چارچوب ریزسرویس Helidon خود گنجانده است، که میتوان آن را بهعنوان یک تأیید بزرگ از این رویکرد تلقی کرد.< /p>
برای کسب اطلاعات بیشتر در مورد MicroStream و لایه تداوم گراف شی منبع باز آن، به ادامه مطلب مراجعه کنید.
سریال سازی جاوا تجدید نظر شد
به یک معنا، میتوانید MicroStream را بهعنوان یک بازسازی از ابتدا از ایده سریالسازی در نظر بگیرید.
سریال سازی سنتی جاوا دارای چندین محدودیت های بد (از جمله آسیب پذیری های امنیتی) که اوراکل را بر آن داشت تا در سال ۲۰۱۸ آن را “اشتباه وحشتناک” بنامد. اما ایده ذاتی، بودن قادر به ذخیره و بازیابی ساده نمودار شی در زمان اجرا است، هنوز هم یک گراف قابل اجرا است.
آنچه نیاز است اجرای بسیار برتر است. اینجاست که MicroStream وارد عمل میشود.
اجرای حافظه پنهان MicroStream
MicroStream JSR-107 را نیز پیادهسازی میکند (مشخصات JCache). این بدان معناست که میتوانید از MicroStream بهعنوان لایه حافظه پنهان خود استفاده کنید (مثلاً با Hibernate/JPA) با یا بدون فعال بودن بخش ماندگاری و ذخیرهسازی MicroStream.
این امر استفاده از MicroStream را بهعنوان یک راهحل حافظه پنهان و ماندگاری یک مرحلهای وسوسهانگیز میکند، بهویژه در زمینه میکروسرویسها.
بهبودهای سریال سازی MicroStream
شاید مهمترین پیشرفتی که MicroStream در سریالسازی سنتی ایجاد میکند، توانایی باقی ماندن تنها بخشهایی از نمودار شی باشد. بدون این، هیچ راه حلی قادر به رسیدگی به نیازهای برنامه های کاربردی دنیای واقعی نیست.
MicroStream همچنین با تغییر ساختارهای کلاس (یک واقعیت در همه برنامهها) با مدلسازی خودکار یا پیکربندی تعریفشده توسط توسعهدهنده سروکار دارد.
همچنین، MicroStream میتواند بر خلاف سریالسازی سنتی، تمام ساختارهای جاوا پایدار را مدیریت کند.
ریشه داده MicroStream
در MicroStream، گراف شی که توسط موتور persistence مدیریت خواهد شد با یک گره ریشه معروف به DataRoot
شروع می شود.
شیء DataRoot
میتواند از هر نوع باشد و در نمونه StorageManager
همانطور که در فهرست ۱ مشاهده میشود تنظیم میشود. توجه داشته باشید که هر زمان که مدیر ذخیرهسازی راهاندازی میشود، به طور خودکار انجام میشود. نمودار آخرین جلسه ماندگار را دوباره آب می کند، که با فراخوانی storeRoot()
اتفاق می افتد.
فهرست ۱. راه اندازی مدیر ذخیره سازی و اختصاص ریشه
public class MyDataRoot {
private String stuff;
public DataRoot() {
super();
}
public String getContent() {
return this.stuff;
}
public void setContent(Object myWonderfulStuff) {
this.stuff = myWonderfulStuff ;
}
@Override
public String toString() {
return "Root: " + this.stuff;
}
}
// ...
final EmbeddedStorageManager storageManager = EmbeddedStorage.start();
System.out.println(storageManager.root());
storageManager.setRoot(MyDataRoot);
storageManager.storeRoot(); // Saves the state
در فهرست ۱، کلاس دارای یک عضو است که می تواند هر شیئی باشد. در یک برنامه دنیای واقعی، ممکن است یک مدل کسب و کار بسازید. می توانید از نقشه به عنوان مدل داده خود استفاده کنید و همه چیز را به صورت جفت کلید-مقدار ذخیره کنید. MicroStream میتواند هر چیزی را که شما به آن پرتاب میکنید کنترل کند، و آنقدر انعطافپذیر است که با ساختارهای کلاس در حال تغییر شما تکامل یابد.
تعریف مسیر فایل
StorageManager
دارای چندین گزینه پیکربندی است. یکی از مهمترین آنها مسیر رسیدن به محل ذخیره داده ها است. این را میتوانید در فهرست ۲ مشاهده کنید.
فهرست ۲. یک مسیر برای ذخیره سازی داده تنظیم کنید
final MyDataRoot myRoot = new MyDataRoot();
final EmbeddedStorageManager storageManager = EmbeddedStorage.start( myRoot, Paths.get("data") );
میتوانید بهخوبی موتور را با storageManager.shutdown();
خاموش کنید.
چند نخ در MicroStream
در کد برنامه چند رشته ای، داده های جهش یافته و پایدار باید همگام شوند. Microstream همانطور که در لیست ۳ نشان داده شده است یک Lambda برای این منظور ارائه می دهد.
فهرست ۳. دسترسی همزمان
XThreads.executeSynchronized(() -> { root.changeData(); storageManager.store(root); });
پیکربندی MicroStream
MicroStream دارای گزینههای پیکربندی متنوعی است که میتوانید آنها را به صورت اعلامی یا برنامهریزی تنظیم کنید.
برای مثال، میتوانید سیستم فایل NIO (IO غیر مسدودکننده) را پیکربندی کنید که زیربنای عملیات خواندن/نوشتن در مدیر فایل است، همانطور که در فهرست ۴ مشاهده میشود. این مثال از اسناد MicroStream گرفته شده است.
فهرست ۴. سیستم فایل NIO را پیکربندی کنید
NioFileSystem fileSystem = NioFileSystem.New();
EmbeddedStorageManager storageManager = EmbeddedStorageFoundation.New() .setConfiguration( StorageConfiguration.Builder()
.setStorageFileProvider( Storage.FileProviderBuilder(fileSystem)
.setDirectory(fileSystem.ensureDirectoryPath("storageDir")) .createFileProvider() )
.setChannelCountProvider(StorageChannelCountProvider.New(4))
.setBackupSetup(StorageBackupSetup.New(
fileSystem.ensureDirectoryPath("backupDir") )) .createConfiguration() )
.createEmbeddedStorageManager();
همچنین میتوانید پیکربندی خارجی را از JSON، YAML، و XML بارگیری کنید.
پرس و جو در MicroStream
یک نتیجه جالب از رویکرد MicroStream عدم نیاز به یک زبان جستجوی تخصصی مانند SQL یا HQL یا یک API معیار است. شما به سادگی می توانید از جاوای استاندارد برای پیمایش نمودار زمان اجرا و انتخاب نتایج استفاده کنید. میتوانید از Looping قدیمی یا Stream API به سبک عملکردی برای پیادهروی در انجمنها و آزمایش اموال یا املاکی که به دنبال آن هستید استفاده کنید. مثال ارائه شده توسط MicroStream در لیست ۵ است، اما هر رویکرد معمولی کار خواهد کرد.
فهرست ۵. یافتن یک شی در نمودار
public List
getUnAvailableArticles() {
return shop.getArticles().stream() .filter(a -> !a.available()) .collect(Collectors.toList()) ;
}
نتیجه این است که، چون لایه داده شما اشیاء قدیمی جاوا را ذخیره می کند، می توانید از جاوای ساده برای درخواست های خود استفاده کنید.
گزینه های ذخیره سازی MicroStream
اگرچه پیشفرض سیستم فایل است، MicroStream یک لایه انتزاعی است که میتواند با راهحلهای پایدار دیگر کار کند. حتی می تواند در برابر سیستم های مدیریت پایگاه داده رابطه ای مانند MariaDB از طریق اتصال دهنده ها اجرا شود. فهرست ۶ به شما نگاهی به آن می دهد.
فهرست ۶. استفاده از رابط MariaDB RDBMS
MariaDbDataSource dataSource = new MariaDbDataSource();
dataSource.setUrl("jdbc:mysql://host:3306/awesomedb");
dataSource.setUser("user");
dataSource.setPassword("secret");
SqlFileSystem fileSystem =
SqlFileSystem.New(SqlConnector.Caching(SqlProviderMariaDb.New(dataSource)));
EmbeddedStorage.start(fileSystem.ensureDirectoryPath("microstream_storage"));
این یک توانایی بسیار قدرتمند است، برای رفتن از اشیاء جاوا به پایگاه داده و بازگشت یکپارچه، به خصوص در مقایسه با کار مربوط به استفاده از یک نقشهبردار رابطهای شی (ORM) مانند Hibernate.
پشتیبانی مشابهی برای استفاده از فروشگاههای داده غیرمرتبط مانند Redis و MongoDB، و فروشگاههای داده ابری مانند Amazon S3 و Oracle Cloud Storage وجود دارد.
حالت های ذخیره سازی MicroStream
MicroStream از دو حالت ذخیره سازی، تنبل و مشتاق پشتیبانی می کند. به طور پیش فرض، MicroStream از ذخیره سازی تنبل استفاده می کند.
در ذخیره سازی تنبل، هنگامی که یک شی ادامه پیدا می کند، دوباره ذخیره نمی شود، حتی در صورت تغییر. برای تداوم یک شیء اصلاح شده، باید صریحاً برای ذخیره آن تماس بگیرید. این مزیت عملکرد آشکار اجتناب از تعامل با سیستم ذخیره سازی اساسی است، مگر اینکه توسعه دهنده آن را درخواست کرده باشد.
در ذخیرهسازی مشتاقانه، MicroStream بهطور خودکار نمونههای ثابت را با تغییر بهروزرسانی میکند. میتوانید نحوه فعال کردن ذخیرهسازی مشتاق را در فهرست ۷ ببینید.
فهرست ۷. ذخیره کننده مشتاق
Storer storer = storage.createEagerStorer(); storer.store(myData); storer.commit();
تغییرکننده میدان گذرا
MicroStream به طور شفاف اصلاحکننده گذرا را پیادهسازی میکند، و چنین اعضایی توسط موتور این یک راه ساده برای انصراف از فضای ذخیره سازی را ایجاد می کند.
عملکرد MicroStream
توسعهدهنده اصلی MicroStream شرح مختصری از پیامدهای عملکرد چارچوب را در اینجا ارائه میدهد. این یک مطالعه کوتاه و ارزشمند است. توضیح میدهد که چگونه سیستم با یک بار خواندن ابرداده طرحبندی کلاس، و سپس نظارت بر تغییر آن، به بهترین عملکرد در کلاس، بدون از دست دادن یکپارچگی ارجاعی دست مییابد. همچنین به شما کمک می کند بفهمید که چگونه MicroStream محدودیت های بازتاب را کاهش می دهد.
یکی دیگر از جنبههای جالب MicroStream این است که چگونه موجودیتهایی را که از نمودار جدا شدهاند (یعنی زباله جمعآوری شدهاند) را ردیابی میکند و بنابراین باید از ذخیرهسازی حذف شوند. این به عنوان خانهداری در MicroStream شناخته میشود و نشاندهنده یک دستاورد فنی چشمگیر است. p>
رویکرد MicroStream برای ذخیره و بارگذاری یک نمودار شی در حال اجرا، راهگشا است و به طور بالقوه می تواند چشم انداز توسعه جاوا را در آینده تغییر دهد. این یک انحراف غیرمنتظره از معماری مرسوم سرویس-ذخیره داده است، اما خوشایند است که منابع اصلی پیچیدگی را حذف می کند.
MicroStream ارزش یک نگاه طولانی را هنگام در نظر گرفتن نیازهای پایدار برنامههای جاوا دارد.
پست های مرتبط
معرفی MicroStream: سریال سازی فوق سریع در جاوا
معرفی MicroStream: سریال سازی فوق سریع در جاوا
معرفی MicroStream: سریال سازی فوق سریع در جاوا