Azure Container Instances a simple way to run a container in Azure, without having to manage any virtual machines.
Brady Gaster returns in this follow up to the previous episode on Worker services. This time Brady will show us how to deploy our worker service to Azure Container Instances
- [00:58] - Creating a new container instance
- [03:08] - Exploring the Docker tools in Visual Studio Code
- [04:30] - Reviewing the deployed container instance
- [05:50] - Exploring the tools for Kubernetes in Visual Studio Code
- [09:57] - Kubernetes Namespaces and Deployments
- [12:10] - .NET Architecture Guides
C#.NET for non-engineers.
The first course of "A Sr. Developer Course" courses. which contains:
1- C# Fundamentals for non-engineers.
2- DataBase for non-engineers.
3- Asp.NET WebForm for Non-engineers.
4- Application Architecture for no-engineers.
5- ASP.NET MVC for non-engineers.
6- Angular for non-engineers.
This is a course for who knows noting about C# and development if you know nothing about Array, variable, loop, and conditions you are in the right place.
at the end of this course, we will create one small university registration console application together.
You will learn in this course:
C#.NET
.NET Framework
Methods
Recursive methods
C# Primitive Types/Complex Types
conditions
switch case
Arrays
if statement
switch
loops
Creating a method
ref, out
enums
OOP/Object-oriented programing
Generics
Error handling
problem-solving
working with files
level: beginners to upper intermediate
سری مقدماتی ASP.NET Core
Introduction to ASP.NET Core part 15: starting with tag helpers
Introduction to ASP.NET Core part 14: the view start and the layout files
Introduction to ASP.NET Core part 13: the view imports file
Introduction to ASP.NET Core part 12: data annotation of view models
Introduction to ASP.NET Core part 11: inserting a new Book in a form
Introduction to ASP.NET Core part 10: the details page and more on view models
Introduction to ASP.NET Core part 9: MVC continued with routing
Introduction to ASP.NET Core part 8: MVC continued with controller actions and our first view
Introduction to ASP.NET Core part 7: starting with MVC
Introduction to ASP.NET Core part 6: environments and settings
Introduction to ASP.NET Core part 5: static files
Introduction to ASP.NET Core part 4: middleware and the component pipeline
Introduction to ASP.NET Core part 3: the configuration file
Introduction to ASP.NET Core part 2: dependencies and dependency injection
Introduction to ASP.NET Core part 1: anatomy of an empty web project
ایجاد یک بانک اطلاعاتی با پشتیبانی از جداول بهینه سازی شده برای حافظه
برای ایجاد جداول بهینه سازی شده برای حافظه، ابتدا نیاز است تا تنظیمات خاصی را به بانک اطلاعاتی آن اعمال کنیم. برای اینکار میتوان یک بانک اطلاعاتی جدید را به همراه یک filestream filegroup ایجاد کرد که جهت جداول بهینه سازی شده برای حافظه، ضروری است؛ یا اینکه با تغییر یک بانک اطلاعاتی موجود و افزودن filegroup یاد شده نیز میتوان به این مقصود رسید.
در اینگونه جداول خاص، اطلاعات در حافظهی سیستم ذخیره میشوند و برخلاف جداول مبتنی بر دیسک سخت، صفحات اطلاعات وجود نداشته و نیازی نیست تا به کش بافر وارد شوند. برای مقاصد ذخیره سازی نهایی اطلاعات جداول بهینه سازی شده برای حافظه، موتور OLTP درون حافظهای آن، فایلهای خاصی را به نام checkpoint در یک filestream filegroup ایجاد میکند که از آنها جهت ردیابی اطلاعات استفاده خواهد کرد و نحوی ذخیره سازی اطلاعات در آنها از شیوهی با کارآیی بالایی به نام append only mode پیروی میکند.
با توجه به متفاوت بودن نحوهی ذخیره سازی نهایی اطلاعات اینگونه جداول و دسترسی به آنها از طریق استریمها، توصیه شدهاست که filestream filegroupهای تهیه شده را در یک SSD یا Solid State Drive قرار دهید.
پس از اینکه بانک اطلاعاتی خود را به روشهای معمول ایجاد کردید، به برگهی خواص آن در management studio مراجعه کنید. سپس صفحهی file groups را در آن انتخاب کرده و در پایین برگهی آن، در قسمت جدید memory optimized data، بر روی دکمهی Add کلیک کنید. سپس نام دلخواهی را وارد نمائید.
پس از ایجاد یک گروه فایل جدید، به صفحهی files خواص بانک اطلاعاتی مراجعه کرده و بر روی دکمهی Add کلیک کنید. سپس File type این ردیف اضافه شده را از نوع file stream data و file group آنرا همان گروه فایلی که پیشتر ایجاد کردیم، تنظیم کنید. در ادامه logical name دلخواهی را وارد کرده و در آخر بر روی دکمهی Ok کلیک کنید تا تنظیمات مورد نیاز جهت تعاریف جدول بهینه سازی شده برای حافظه به پایان برسد.
این مراحل را توسط دو دستور T-SQL ذیل نیز میتوان سریعتر انجام داد:
USE [master] GO ALTER DATABASE [testdb2] ADD FILEGROUP [InMemory_InMemory] CONTAINS MEMORY_OPTIMIZED_DATA GO ALTER DATABASE [testdb2] ADD FILE ( NAME = N'InMemory_InMemory', FILENAME = N'D:\SQL_Data\MSSQL11.MSSQLSERVER\MSSQL\DATA\InMemory_InMemory' ) TO FILEGROUP [InMemory_InMemory] GO
ساختار گروه فایل بهینه سازی شده برای حافظه
گروه فایل بهینه سازی شده برای حافظه، دارای چندین دربرگیرنده است که هر کدام چندین فایل را در خود جای خواهند داد:
- Root File که در برگیرندهی متادیتای اطلاعات است.
- Data File که شامل ردیفهای اطلاعات ثبت شده در جداول بهینه سازی شدهی برای حافظه هستند. این ردیفها همواره به انتهای data file اضافه میشوند و دسترسی به آنها ترتیبی است. کارآیی IO این روش نسبت به روش دسترسی اتفاقی به مراتب بالاتر است. حداکثر اندازه این فایل 128 مگابایت است و پس از آن یک فایل جدید ساخته میشود.
- Delta File شامل ردیفهایی است که حذف شدهاند. به ازای هر ردیف، حداقل اطلاعاتی از آن را در خود ذخیره خواهد کرد؛ شامل ID ردیف حذف شده و شماره تراکنش آن. همانطور که پیشتر نیز ذکر شد، این موتور جدید درون حافظهای، برای یافتن راه چارهای جهت به حداقل رسانی قفل گذاری بر روی اطلاعات، چندین نگارش از ردیفها را به همراه timestamp آنها در خود ذخیره میکند. به این ترتیب، هر به روز رسانی به همراه یک حذف و سپس ثبت جدید است. به این ترتیب دیگر بانک اطلاعاتی نیازی نخواهد داشت تا به دنبال رکورد موجود برگردد و سپس اطلاعات آنرا به روز نماید. این موتور جدید فقط اطلاعات به روز شده را در انتهای رکوردهای موجود با فرمت خود ثبت میکند.
ایجاد جداول بهینه سازی شده برای حافظه
پس از آماده سازی بانک اطلاعاتی خود و افزودن گروه فایل استریم جدیدی به آن برای ذخیره سازی اطلاعات جداول بهینه سازی شده برای حافظه، اکنون میتوانیم اینگونه جداول خاص را در کنار سایر جداول متداول موجود، تعریف و استفاده نمائیم:
-- It is not a Memory Optimized CREATE TABLE tblNormal ( [CustomerID] int NOT NULL PRIMARY KEY NONCLUSTERED, [Name] nvarchar(250) NOT NULL, CustomerSince DATETIME not NULL INDEX [ICustomerSince] NONCLUSTERED ) -- DURABILITY = SCHEMA_AND_DATA CREATE TABLE tblMemoryOptimized_Schema_And_Data ( [CustomerID] INT NOT NULL PRIMARY KEY NONCLUSTERED HASH WITH (BUCKET_COUNT = 1000000), [Name] NVARCHAR(250) NOT NULL, [CustomerSince] DATETIME NOT NULL INDEX [ICustomerSince] NONCLUSTERED ) WITH (MEMORY_OPTIMIZED = ON, DURABILITY = SCHEMA_AND_DATA) -- DURABILITY = SCHEMA_ONLY CREATE TABLE tblMemoryOptimized_Schema_Only ( [CustomerID] INT NOT NULL PRIMARY KEY NONCLUSTERED HASH WITH (BUCKET_COUNT = 1000000), [Name] NVARCHAR(250) NOT NULL, [CustomerSince] DATETIME NOT NULL INDEX [ICustomerSince] NONCLUSTERED ) WITH (MEMORY_OPTIMIZED = ON, DURABILITY = SCHEMA_ONLY)
همانطور که مشخص است، دو جدول بهینه سازی شده برای حافظه، همان سه ستون جدول معمولی مبتنی بر دیسک سخت را دارا هستند؛ اما با این تفاوتها:
- دارای ویژگی MEMORY_OPTIMIZED = ON میباشند. به این ترتیب اینگونه جداول نسبت به جداول متداول مبتنی به دیسک سخت متمایز خواهند شد.
- دارای ویژگی DURABILITY بوده و توسط مقدار SCHEMA_AND_DATA آن مشخص میکنیم که آیا قرار است اطلاعات و ساختار جدول، ذخیره شوند یا تنها قرار است ساختار جدول ذخیره گردد (حالت SCHEMA_ONLY).
- بر روی ستون Id آنها یک hash index ایجاد شدهاست که وجود آن ضروری است و در کل بیش از 8 ایندکس را نمیتوان تعریف کرد.
برخلاف ایندکسهای B-tree جداول مبتنی بر سخت دیسک، ایندکسهای جداول بهینه سازی شده برای حافظه، اطلاعات را تکرار نمیکنند. اینها صرفا اشارهگرهایی هستند به ردیفهای اصلی اطلاعات. به این معنا که این ایندکسها لاگ نشده و همچنین بر روی سخت دیسک ذخیره نمیشوند. کار بازسازی مجدد آنها در اولین بار بازیابی بانک اطلاعاتی و آغاز آن به صورت خودکار انجام میشود. به همین جهت مباحثی مانند index fragmentation و نگهداری ایندکسها دیگر در اینجا معنا پیدا نمیکنند.
دو نوع ایندکس را در اینجا میتوان تعریف کرد. اولین آنها hash index است و دومین آنها range index. هش ایندکسها برای حالاتی که در کوئریها از عملگر تساوی استفاده میشود بسیار مناسب هستند. برای عملگرهای مقایسهای از ایندکسهای بازهای استفاده میشود.
همچنین باید دقت داشت که پس از ایجاد ایندکسها، دیگر امکان تغییر آنها و یا تغییر ساختار جدول ایجاد شده نیست.
همچنین ایندکسهای تعریف شده در جداول بهینه سازی شده برای حافظه، تنها بر روی ستونهایی غیرنال پذیر از نوع BIN2 collation مانند int و datetime قابل تعریف هستند. برای مثال اگر سعی کنیم بر روی ستون Name ایندکسی را تعریف کنیم، به این خطا خواهیم رسید:
Indexes on character columns that do not use a *_BIN2 collation are not supported with indexes on memory optimized tables.
- نوعهای قابل تعریف ستونها نیز در اینجا به موارد ذیل محدود هستند و جمع طول آنها از 8060 نباید بیشتر شود:
bit, tinyint, smallint, int, bigint, money, smallmoney, float, real, datetime, smalldatetime, datetime2, date, time, numberic, decimal, char(n), varchar(n) ,nchar(n), nvarchar(n), sysname, binary(n), varbinary(n), and Uniqueidentifier
همچنین در management studio، گزینهی جدید new -> memory optimized table نیز اضافه شدهاست و انتخاب آن سبب میشود تا قالب T-SQL ایی برای تهیه این نوع جداول، به صورت خودکار تولید گردد.
البته این گزینه تنها برای بانکهای اطلاعاتی که دارای گروه فایل استریم مخصوص جداول بهینه سازی شده برای حافظه هستند، فعال میباشد.
ثبت اطلاعات در جداول معمولی و بهینه سازی شده برای حافظه و مقایسه کارآیی آنها
در مثال زیر، 100 هزار رکورد را در سه جدولی که پیشتر ایجاد کردیم، ثبت کرده و سپس مدت زمان اجرای هر کدام از مجموعه عملیات را بر حسب میلی ثانیه بررسی میکنیم:
set statistics time off SET STATISTICS IO Off set nocount on go ----------------------------- Print 'insert into tblNormal' DECLARE @start datetime = getdate() declare @insertCount int = 100000 declare @startId int = 1 declare @customerID int = @startId while @customerID < @startId + @insertCount begin insert into tblNormal values (@customerID, 'Test', '2013-01-01T00:00:00') set @customerID +=1 end Print DATEDIFF(ms,@start,getdate()); go ----------------------------- Print 'insert into tblMemoryOptimized_Schema_And_Data' DECLARE @start datetime = getdate() declare @insertCount int = 100000 declare @startId int = 1 declare @customerID int = @startId while @customerID < @startId + @insertCount begin insert into tblMemoryOptimized_Schema_And_Data values (@customerID, 'Test', '2013-01-01T00:00:00') set @customerID +=1 end Print DATEDIFF(ms,@start,getdate()); Go ----------------------------- Print 'insert into tblMemoryOptimized_Schema_Only' DECLARE @start datetime = getdate() declare @insertCount int = 100000 declare @startId int = 1 declare @customerID int = @startId while @customerID < @startId + @insertCount begin insert into tblMemoryOptimized_Schema_Only values (@customerID, 'Test', '2013-01-01T00:00:00') set @customerID +=1 end Print DATEDIFF(ms,@start,getdate()); Go
insert into tblNormal 36423 insert into tblMemoryOptimized_Schema_And_Data 30516 insert into tblMemoryOptimized_Schema_Only 3176
set nocount on print 'tblNormal' set statistics time on select count(CustomerID) from tblNormal set statistics time off go print 'tblMemoryOptimized_Schema_And_Data' set statistics time on select count(CustomerID) from tblMemoryOptimized_Schema_And_Data set statistics time off go print 'tblMemoryOptimized_Schema_Only' set statistics time on select count(CustomerID) from tblMemoryOptimized_Schema_Only set statistics time off go
tblNormal SQL Server Execution Times: CPU time = 46 ms, elapsed time = 52 ms. tblMemoryOptimized_Schema_And_Data SQL Server Execution Times: CPU time = 32 ms, elapsed time = 33 ms. tblMemoryOptimized_Schema_Only SQL Server Execution Times: CPU time = 31 ms, elapsed time = 30 ms.
برای مطالعه بیشتر
Getting started with SQL Server 2014 In-Memory OLTP
Introduction to SQL Server 2014 CTP1 Memory-Optimized Tables
Overcoming storage speed limitations with Memory-Optimized Tables for SQL Server
Memory-optimized Table – Day 1 Test
Memory-Optimized Tables – Insert Test
Memory Optimized Table – Insert Test …Again
TypeScript 4.4 منتشر شد
Some major highlights of TypeScript 4.4 are:
Control Flow Analysis of Aliased Conditions and Discriminants
Symbol and Template String Pattern Index Signatures
Defaulting to the unknown Type in Catch Variables (--useUnknownInCatchVariables)
Exact Optional Property Types (--exactOptionalPropertyTypes)
Class static Blocks
tsc --help Updates and Improvements
Performance Improvements
Spelling Suggestions for JavaScript
Inlay Hints
Breaking Changes
بررسی سیر تکاملی معماری کلین
تو این ویدیو به طور کامل از معماری لایه ای به معماری کلین رسیدیم و سیر تکاملی این الگوهای معماری رو بررسی کردیم. پیشنهاد میکنم حتما ببینید.
01:00 Previous Session
05:00 Clean Architecture
12:50 Review Hexagonal, Onion, Clean
"Understand all of this, but use only what you need"
آموزش 2 ساعته روش کار با Postman
"Learn Postman in One Video: Master the API Testing Tool" is an engaging and comprehensive Udemy course designed to take you from a beginner to a proficient user of Postman. In this concise and focused course, you will learn everything you need to know about Postman, the popular API testing and development tool.