اشتراکها
ASP.NET Core 5 Preview 6 منتشر شد
.NET 5 Preview 6 is now available and is ready for evaluation. Here’s what’s new in this release:
- Blazor WebAssembly template now included
- JSON extension methods for
HttpRequest
andHttpResponse
- Extension method to allow anonymous access to an endpoint
- Custom handling of authorization failures
- SignalR Hub filters
لطفا توجه فرمایید که جالبترین قسمت این مقاله قابلیت استفاده از کلاسهای دات نت در دل PowerShell میباشد. که در قسمت چهارم کدها مشاهده میفرمایید.
حذف تمام رکوردهای یک لیست شیرپوینت از طریق رابط کاربری SharePoint مسیر نمیباشد و لازم است برای آن چند خط کد نوشته شود که میتوانید آن را با console و جالبتر از آن با PowerShell اجرا کنید.
1- سادهترین روش حذف رکوردهای شیرپوینت را در روبرو مشاهده میفرمایید که به ازای حذف هر رکورد یک رفت و برگشت به پایگاه انجام میشودSPList list = mWeb.GetList(strUrl); if (list != null) { for (int i = list.ItemCount - 1; i >= 0; i--) { list.Items[i].Delete(); } list.Update(); }
public static void DeleteAllItems(string site, string list) { using (SPSite spSite = new SPSite(site)) { using (SPWeb spWeb = spSite.OpenWeb()) { StringBuilder deletebuilder = BatchCommand(spWeb.Lists[list]); spSite.RootWeb.ProcessBatchData(deletebuilder.ToString()); } } } private static StringBuilder BatchCommand(SPList spList) { StringBuilder deletebuilder= new StringBuilder(); deletebuilder.Append("<?xml version=\"1.0\" encoding=\"UTF-8\"?><Batch>"); string command = "<Method><SetList Scope=\"Request\">" + spList.ID + "</SetList><SetVar Name=\"ID\">{0}</SetVar><SetVar Name=\"Cmd\">Delete</SetVar></Method>"; foreach (SPListItem item in spList.Items) { deletebuilder.Append(string.Format(command, item.ID.ToString())); } deletebuilder.Append("</Batch>"); return deletebuilder; }
3- در قسمت زیر همان روش batch قبلی را مشاهده میفرمایید که با تقسیم کردن batch ها به تکههای 1000 تایی کارایی آن را بالا برده ایم
// We prepare a String.Format with a String.Format, this is why we have a {{0}} string command = String.Format("<Method><SetList Scope=\"Request\">{0}</SetList><SetVar Name=\"ID\">{{0}}</SetVar><SetVar Name=\"Cmd\">Delete</SetVar><SetVar Name=\"owsfileref\">{{1}}</SetVar></Method>", list.ID); // We get everything but we limit the result to 100 rows SPQuery q = new SPQuery(); q.RowLimit = 100; // While there's something left while (list.ItemCount > 0) { // We get the results SPListItemCollection coll = list.GetItems(q); StringBuilder sbDelete = new StringBuilder(); sbDelete.Append("<?xml version=\"1.0\" encoding=\"UTF-8\"?><Batch>"); Guid[] ids = new Guid[coll.Count]; for (int i=0;i<coll.Count;i++) { SPListItem item = coll[i]; sbDelete.Append(string.Format(command, item.ID.ToString(), item.File.ServerRelativeUrl)); ids[i] = item.UniqueId; } sbDelete.Append("</Batch>"); // We execute it web.ProcessBatchData(sbDelete.ToString()); //We remove items from recyclebin web.RecycleBin.Delete(ids); list.Update(); } }
برای فهم script پاور شل زیر کافیست به چند نکته ساده زیر دقت کنید
- ایجاد متغیرها به سادگی با شروع نوشتن نام متغیر با $ و بدون تعریف نوع آنها انجام میشود
- write-host حکم write را دارد و واضح است که نوشتن تنهای آن برای ایجاد یک line break میباشد.
- کامنت کردن با #
- عدم وجود semi colon برای اتمام فرامین
[System.Reflection.Assembly]::Load("Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c") [System.Reflection.Assembly]::Load("Microsoft.SharePoint.Portal, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c") [System.Reflection.Assembly]::Load("Microsoft.SharePoint.Publishing, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c") [System.Reflection.Assembly]::Load("System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a") write-host # Enter your configuration here $siteUrl = "http://mysharepointsite.example.com/" $listName = "Name of my list" $batchSize = 1000 write-host "Opening web at $siteUrl..." $site = new-object Microsoft.SharePoint.SPSite($siteUrl) $web = $site.OpenWeb() write-host "Web is: $($web.Title)" $list = $web.Lists[$listName]; write-host "List is: $($list.Title)" while ($list.ItemCount -gt 0) { write-host "Item count: $($list.ItemCount)" $batch = "<?xml version=`"1.0`" encoding=`"UTF-8`"?><Batch>" $i = 0 foreach ($item in $list.Items) { $i++ write-host "`rProcessing ID: $($item.ID) ($i of $batchSize)" -nonewline $batch += "<Method><SetList Scope=`"Request`">$($list.ID)</SetList><SetVar Name=`"ID`">$($item.ID)</SetVar><SetVar Name=`"Cmd`">Delete</SetVar><SetVar Name=`"owsfileref`">$($item.File.ServerRelativeUrl)</SetVar></Method>" if ($i -ge $batchSize) { break } } $batch += "</Batch>" write-host write-host "Sending batch..." # We execute it $result = $web.ProcessBatchData($batch) write-host "Emptying Recycle Bin..." # We remove items from recyclebin $web.RecycleBin.DeleteAll() write-host $list.Update() } write-host "Done."
- Accessibility improvements in narration, high contrast and focus control areas
- .NET Framework support for .NET Standard 2.0 and compiler features
- More secure SHA-2 support in ASP.NET and System.Messaging
- Configuration builders
- ASP.NET Execution step feature
- ASP.NET HttpCookie parsing
- Enhancements in Visual Tree for WPF applications
- Performance and reliability improvements
- C++ Linux project - Remote header sync is broken in Visual Studio 16.3
- Visual Studio 16.3 opens some files with notepad
- Fixed an issue with the Show Output window either closing too quickly.
- Fixed an issue where Visual Studio 2019 stops responding in several scenarios, including opening a solution, changing solution configuration, and closing a solution.
مطالب
بررسی اجمالی Redis
نام Redis از Remote Dictionary server گرفته شدهاست. Redis یکی از محبوبترین key-value storeها میباشد و هم چنین توسط برندهای بزرگ IT جهان استفاده میشود. لازم به ذکر است Amazon Elastic Cache از Redis پشتیبانی میکند. Redis یک دیتابیس No SQL است و بر روی مفهوم زوج کلید-مقدار (key-value ) کار میکند. key-value store امکانی را برای ذخیره دادهها که Value نامیده میشود، در یک Key فراهم میکند. شما میتوانید بعدا این دادهها را دریافت کنید، تنها اگر نام دقیق کلیدی را که برای ذخیره داده استفاده کردهاید، بدانید.
What Is In-Memory, Key-Value Store
Key-Value store یک سیستم ذخیره سازی است؛ جایی که دادهها به صورت زوج کلید-مقدار ذخیره میشوند. وقتی که میگوییم in-memory key-value store (زوج کلید-مقدار مقیم در حافظه)، منظور این است که زوج کلید-مقدار در حافظه اصلی RAM ذخیره میشوند. بنابراین میتوانیم بگوییم Redis دادهها را در حافظه به شکل زوج کلید-مقدار ذخیره کرده است.
در Redis کلیدها باید string باشند؛ ولی value ها میتوانند یک string ، list ، set ، sorted set یا hash باشند.
Advantage And Disadvantage of Redis over DBMS
Database Management systems همه چیز را در حافظه ثانویه ذخیره میکند که باعث میشود خواندن و نوشتن عملیات، تا اندازهای کند باشد. این در حالی است که Redis همه چیز را در حافظه اصلی ذخیره میکند و همین موضوع باعث میشود که خواندن و نوشتن دادهها توسط آن خیلی سریع باشند.
حافظه اصلی محدود است. بنابراین Redis نمیتواند فایلهای بزرگ یا binary data را ذخیره کند و تنها اطلاعات متنی کوچک را ذخیره میکند که نیاز است قابل دسترسی و اصلاح باشند و با نرخ خیلی سریعی قابل درج باشند. اگر تلاش کنیم که دادههای بیشتری را نسبت به حافظه موجود بنویسیم، در این حالت خطا دریافت خواهیم کرد.
Redis | RDBMS |
Redis همه چیز را در حافظه اصلی ذخیره میکند. | RDBMS همه چیز را در حافظه ثانویه ذخیره میکند. |
در Redis بخاطر ذخیره سازی دادهها در حافظه اصلی، خواندن و نوشتن عملیات به شدت سریع میباشد. | در RDBMS بخاطر ذخیره سازی دادهها در حافظه ثانویه، خواندن و نوشتن عملیات کند است. |
حافظه اصلی از نظر size کوچکتر و از لحاظ قیمت نسبت به حافظه ثانویه گرانتر میباشد. Redis نمیتواند دادههای بزرگ یا binary data را ذخیره کند. | حافظه ثانویه از نظر size بزرگتر و از لحاظ قیمت نسبت به حافظه اصلی ارزانتر میباشد. RDBMS به آسانی میتواند با انواع فایلها کار کند. |
Redis Advantages
- Redis : Exceptionally fast خیلی سریع است و میتواند حدود 110000 ، SET و 81000 ، GET را به ازای هر ثانیه انجام دهد.
- Redis : Supports rich data type بیشتر دیتا تایپها را که توسعه دهندگان قبلا آنها را شناختهاند، پشتیبانی میکند؛ از قبیل string ، list ، set ، sorted set یا hash .
- Operations are atomic : تمام عملیات Redis اتمیک میباشند که این اطمینان خاطر را میدهد اگر دو کلاینت به صورت همزمان به آن دسترسی داشته باشند، Redis server مقدار update شده را دریافت خواهد کرد.
- Redis : Multi-utility tool یک ابزار چند منظوره است که میتواند در برخی از سناریوها استفاده شود از قبیل: Redis ) messaging-queues , caching به صورت بومی از Publish/Subscribe پشتیبانی میکند ) , هر داده ای با طول عمر کوتاه در Application مانند web application sessions , ... .
Redis Single Instance Architecture
معماری Redis شامل دو پروسه اصلی است:
1- Redis client
2- Redis Server
Redis client و Redis Server هر دو میتوانند در یک کامپیوتر یا کامپیوترهای متفاوت باشند. Redis server مسئول ذخیره سازی دادهها در حافظه میباشد. همانطور که متوجه هستیم، Redis همه چیز را در حافظه اصلی ذخیره میکند و حافظه اصلی فرار است؛ از این رو زمانیکه Redis server یا کامپیوتر را راه اندازی مجدد (restart) میکنیم، همه دادههای ذخیره شده را از دست خواهیم داد. بنابراین نیازمند یک راهحل، جهت ماندگاری datastore میباشیم.
Redis Persistance
سه راه متفاوت وجود دارد که Redis را پایدار میکند : RDB ، AOF و دستور SAVE
1- RDB : RDB Mechanism یک نمونه از تمام دادههای در حافظه را تهیه و آنها را در حافظه ثانویه ذخیره میکند (ذخیره سازی ماندگار) که در یک وقفه مشخص اتفاق میافتد. بنابراین این شانس وجود دارد که شما دادههایی را از دست بدهید که بعد از آخرین Set , RDB’s snapshot شدهاند .
2-AOF : AOF همه عملیات نوشتن دریافت شده توسط سرور را ثبت میکند. بنابراین همه چیز پایدار است. مشکل استفاده از AOF این است که برای هر عملیات، شروع به نوشتن در دیسک میکند و این یک کار هزینهبر است و هم چنین اندازه فایل AOF بزرگتر از RDB میباشد.
3-SAVE Command : شما میتوانید Redis server را مجبور کنید که یک RDB snapshot را ایجاد کند؛ هر زمانکه Redis console client از دستور SAVE استفاده میکند.
در ضمن میتوانید از AOF و RDB با هم استفاده کنید تا بهترین نتیجه ماندگاری را داشته باشید.
Redis Replication
Replication یک تکنیک است که کامپیوترها را درگیر میکند تا دسترسی پذیری دادهها و تحمل خطا را با ضریب بیشتری امکان پذیر کنند. در یک محیط Replication، کامپیوترها، دادههای یکسانی را با یکدیگر به اشتراک میگذارند؛ حتی اگر چندین کامپیوتر دچار مشکل شوند، باز هم، همه دادهها در دسترس خواهند بود که به صورت Master/Slaves میباشند.
تمام slaveها شامل دادههای یکسانی همانند master میباشند. وقتیکه یک slave جدید در محیط Replication ایجاد میشود، master به صورت خودکار همه دادهها را با sync ، slave میکند.
تمام Query ها به سرور master هدایت میشوند و سپس سرور master عملیات را اجرا میکند. وقتیکه یک عملیات نوشتن اتفاق میافتد، سرور master دادههایی را که بهتازگی نوشته شدهاند، در تمام slaveها تکثیر میکند.
اگر اتفاقی در سرور master رخ دهد، تمام دادهها از بین میروند؛ در این حالت باید یک slave را به master تبدیل کنیم.
Clustering In Redis
Clustering یک تکنیک میباشد که توسط آن میتوان دادهها را در چندین کامپیوتر تقسیم بندی کرد. فرض کنید که یک سرور Redis را با 64GB حافظه در اختیار داریم. در این حالت میتوانیم 64GB داده داشته باشیم. اگر 10 تا clustered computer را که هر کدام 64GB حافظه اصلی دارند، داشته باشیم، در این حالت میتوان 640GB داده را ذخیره کرد.
در تصویر بالا میتوانیم ببینیم که دادهها در چهار node، ذخیره شدهاند. هر node یک Redis Server پیکربندی شده میباشد؛ به عنوان یک cluster node. اگر یکی از node ها دچار مشکل شوند، سپس کل cluster متوقف میشود.
Redis Client
وب سایت Try Redis ، یک Redis console client آنلاین است و به شما کمک میکند تا یاد بگیرید چگونه از Redis console client استفاده کنید.
در قسمت بعد در رابطه با نصب Redis بر روی سیستم عامل ویندوز و دیتا تایپها در Redis صحبت خواهیم کرد.