وبگاه شخصی حسن فتحی

۹ مطلب با موضوع «تکنولوژی» ثبت شده است

IEnumerable VS IQueryable in .Net Framework

دو عنصر بالا از شی ها یا به عبارتی نوع داده های (Data Type) دات نت هستند؛ ما از IEnumerable  و IQueryable برای دستکاری داده استفاده می کنیم (LINQ). در دات نت IEnumerable  توسط IQueryable  به ارث برده می شود به عبارتی دیگر IQueryable  همه ویژگی های IEnumerable  دارد و علاوه بر آن ها ویژگی های منحصر به فرد خود را نیز دار؛ هر دوی این دو شی برای بازیابی و دستکاری داده های موجود در پایگاه داده (Database) به کار می روند. اجازه دهید ویژگی های هر کدام و برتری آنها نسبت به هم را نام ببرم؛ که نقش مهمی در بالا بردن سرعت و کارایی پرس و جوهای (LINQ) دارند.
دو عنصر بالا شباهت زیادی به هم دارند و همه برنامه نویسان از هر دو آنها استفاده می کنند ولی از لحاض کارایی در سناریوهای مختلف متفاوت عمل می کنند.

IEnumerable  :
  • فضای نام (System.Collections)
  • بهترین مورد استفاده آن در بازیابی داده از شی های موجود در حافظه (in-Memory Objects) مانند لیست، آرایه و ... است 
  • موقعی که بازیابی داده از پایگاه داده انجام می شود IEnumerable  پرس و جو را سمت سرور اجرا کرده و داده ها را در شی های in-Memory در سمت کلاینت بارگذاری کرده و بعد عمل فیلترینگ را انجام می دهد
  • بهترین و مناسب ترین برای پرس و جوهای LINQ to Object و LINQ to XML
  • پشتیبانی از (deferred execution)
  • عدم پشتیبانی از پرس و جوهای سفارشی (custom query)
  • عدم پشتیبانی از (lazy loading) و نامناسب برای صفحه بندی (paging)
IQueryable :
  • فضای نام (System.Linq)
  • بهترین مورد استفاده آن در بازیابی داده از شی های موجود در خارج حافظه (out-Memory Objects) مانند پایگاه داده ها، سرویس ها و ... است 
  • موقعی که بازیابی داده از پایگاه داده انجام می شود IQueryable پرس و جو را سمت سرور با انجام  عمل فیلترینگ اجرا می کند
  • بهترین و مناسب ترین برای پرس و جوهای LINQ to SQL
  • پشتیبانی از (deferred execution)
  • پشتیبانی از پرس و جوهای سفارشی (custom query) با استفاده از CreateQuery و Execute methods.
  • پشتیبانی از (lazy loading) و مناسب برای صفحه بندی (paging)
مثال :
IEnumerable  :
  1. MyDataContext db = new MyDataContext ();
  2. IEnumerable<Employee> list = db.Employees.Where(p => p.Name.StartsWith("S"));
  3. list = list.Take<Employee>(10);
پرس و جوی تولید شده :
  1. SELECT [t0].[EmpID], [t0].[EmpName], [t0].[Salary] FROM [Employee] AS [t0]
  2. WHERE [t0].[EmpName] LIKE @p0
توجه : اجرای پرس و جو سمت سرور (SQL SERVER) و فیلتر کردن آن سمت کلاینت توسط شی موجود در حافظه کلاینت

IQueryable :
  1. MyDataContext db = new MyDataContext ();
  2. IQueryable<Employee> list = db.Employees.Where(p => p.Name.StartsWith("S"));
  3. list = list.Take<Employee>(10);
پرس و جوی تولید شده :
  1. SELECT TOP 10 [t0].[EmpID], [t0].[EmpName], [t0].[Salary] FROM [Employee] AS [t0]
  2. WHERE [t0].[EmpName] LIKE @p0
توجه : اجرای پرس و جو سمت سرور (SQL SERVER) و فیلتر کردن آن در همان سمت
۱۵ اسفند ۹۴ ، ۱۰:۳۶ ۱ نظر موافقین ۱ مخالفین ۰
حسن فتحی

نظارت بر عملکرد و کارایی پایگاه داده با استفاده از Query Store در SQL SERVER 2016

قابلیت  Query Store امکانی را برای مدیران پایگاه‌ داده‌ها فراهم می‌کند تا با بینشی عمیق برای کوئری های خود Execution Plan (طرح پرس و جو)ی مناسبی را در جهت بهبود کارایی و عملکرد پایگاه داده خود انتخاب کنند. این امکان شما را قادر می‌سازد تا با یک عیب‌یابی ساده عملکرد تاثیرات ناشی از تغییرات کوئری‌ها در طرح پرس و جو را ردیابی کرده و با مشاهده تفاوت عملکردها بهترین کوئری را (از لحاظ کارایی) انتخاب کنید؛ این امکان به طور خودکار تاریخچه کوئری ها، طرح کوئری ها و آمار های زمان اجرا را ذخیره و برای استفاده و بازبینی شما نمایش می دهد، داده ها را بر اساس ساعت سیستم (زمان ویندوز) جدا و دسته بندی می‌کند و به شما اجازه می‌دهد الگوهای استفاده از پایگاه داده را مشاهده و تغییرات Execution Plan ها را روی سرور مشاهده کنید.

فعال سازی Query Store:
توسط صفحه Query Store در Management Studio :
1- روی پایگاه داده راست کلیک کرده و گزینه Properties را انتخاب کنید
2- در Database Properties روی گزینه Query Store کلیک کنید
3- در جعبه Enable  گزینه True را انتخاب کنید
توسط دستور ALTER DATABASE :
ALTER DATABASE dataBase_Name SET QUERY_STORE = ON;
بعد از فعال سازی این امکان Object Explorer را Refresh کنید تا بخش Query Store در پایگاه داده شما اضافه شود. بعد از اضافه شدن یکسری توابع، وییو و روال و کوئری ها هستند که با استفاده از آن ها میتوانید Query Store را مدیریت کنید.
هفت وییو برای ارائه اطلاعات درباره Query Store وجود دارد:

شش Stored Procedure برای پیکربندی Query Store وجود دارد:



برای اطلاعات بیشتر و تکمیلی به MSDN مراجعه کنید.
۱۰ دی ۹۴ ، ۱۶:۱۸ ۱ نظر موافقین ۰ مخالفین ۰
حسن فتحی

تلنت یاب | ارزیابی | آزمون شخصیتی | توسعه فردی

تلنت یاب بستری برای شناسایی استعدادها و توسعه مهارت های حرفه ای است که شامل انواع آزمون های شخصیتی طبق استاندادرهای موجود است، همچنین تلنت یاب دارای محتوایی غنی برای بالا بردن دانسته ها و توسعه فردی است.


**برای مشاهده عکس زیر را کلیک کنید**

۳۰ آبان ۹۴ ، ۱۸:۱۸ ۰ نظر موافقین ۰ مخالفین ۰
حسن فتحی

امکان جدید بسط جداول در اس کیو ال سرور ۲۰۱۶

در بسیاری از جداول بانکهای اطلاعاتی، اغلب داده هایی که مورد جستجو و بازیابی قرار می گیرند، داده هایی هستند که اخیراً ذخیره شده اند و به ندرت به داده هایی مثلا با قدمت یکسال پیش نیاز داریم.

بنابراین بسیار عقلانی به نظر میرسد که داده های قدیمی را جدا از داده های جدید نگه داریم تا سرعت بازیابی و جستجو و درج اطلاعاتمان بالا رود. از طرفی با ایجاد یک مکانیزم بهینه، کاری کنیم که در صورت جستجوی داده های قدیمی تر، آنها نیز در نتایج ظاهر شوند و کاربر متوجه تفکیک این دو بخش (داده های قدیمی، داده های جدید) نشود.

مایکروسافت در نسخه جدید اس کیو ال سرور یعنی SQL Server 2016‌ این امکان را به مجموعه امکانات خود اضافه کرده است و از سرویس ابری و آنلاین آژور Azure  برای ذخیره داده های قدیمی و از سیستم محلی کاربر برای داده های جدید استفاده می کند. نکته جالب ماجرا اینجاست که با فعال کردن این قابلیت که StretchDB نام دارد و ساخت یک حساب کاربری در سرویس ابری آژور، عملیات انتقال داده ها به سرور آژور به صورت خودکار توسط خود اسکیو ال سرور انجام میگیرد و بازیابی اطلاعات هم به صورت خودکار صورت می پذیرد.


منبع: سایت مهندسی داده

۲۳ آبان ۹۴ ، ۱۶:۳۱ ۰ نظر موافقین ۱ مخالفین ۰
حسن فتحی

با یکی از باگ های ویندوز 10 آشنا شوید

اخیرا مایکروسافت یک بسته بروزرسانی مهمی برای ویندوز 10  منتشر کرده است که به این وسیله یکی از باگ هایی که کاربران مدام از ان شاکی بودند و شکایت داشتند رفع میشود در ادامه با جزئیات بیشتر در خدمت شما هستیم.

ادامه مطلب...
۳۰ مرداد ۹۴ ، ۱۳:۳۴ ۰ نظر موافقین ۰ مخالفین ۰
حسن فتحی

حقایقی جالب در مورد اینترنت اکسپلورر

مرورگر اینترنتی Internet Explorer مایکروسافت که روزگاری محبوبیت زیادی داشت این هفته ۲۰ ساله شد و این اتفاق در حالی صورت گرفت که مایکروسافت تصمیم خود را برای بازنشسته شدن آن نهایی کرد.

ادامه مطلب...
۳۰ مرداد ۹۴ ، ۱۳:۲۸ ۰ نظر موافقین ۰ مخالفین ۰
حسن فتحی

نحوه ایجاد Column Stored Index در SQL Server 2012

برای ایجاد Column Stored Index ابتدا باید فیلدهای شرکت کننده در ایندکس را تعیین و پس از آن ایندکس را ایجاد نمایید. مثال زیر نحوه انجام اینکار را نمایش می‌دهد.

۱- برای شروع کار یک جدول جدید ایجاد می‌کنیم. این جدول دارای یک Primary Key است که با استفاده از Clustered Index ایجاد شده است. بدلیل اینکه جداول شما از قبل وجود دارند ممکن است این مرحله جزء کار شما نباشد.

USE tempdb
GO
IF OBJECT_ID('Employees', 'U') IS NOT NULL
 DROP TABLE Employees
GO
CREATE TABLE Employees_ColumnBased
(
 Code INT IDENTITY CONSTRAINT PK_Code PRIMARY KEY,
 FirstName NVARCHAR(50),
 LastName NVARCHAR(80),
 HireDate SMALLDATETIME,
 City NVARCHAR(20)
)
GO
۲- در این مرحله تعدادی داده تستی در جدول درج می‌کنیم.

INSERT INTO Employees_ColumnBased (FirstName,LastName,HireDate,City) VALUES
 (N'مسعود',N'طاهری','۲۰۰۰-۰۱-۰۱',N'میانه'),
 (N'فرید',N'طاهری','۲۰۰۳-۰۱-۰۱',N'میانه'),
 (N'احمد',N'غفاری','۲۰۰۳-۰۱-۰۱',N'میانه'),
 (N'خدیجه',N'افروزنیا','۲۰۰۰-۰۱-۰۱',N'تهران'),
 (N'مجید',N'طاهری','۲۰۰۵-۰۱-۰۱',N'تهران')
GO
INSERT INTO Employees_ColumnBased (FirstName,LastName,HireDate,City)
 SELECT FirstName,LastName,HireDate,City FROM Employees_ColumnBased
GO 10
۳- در این مرحله یک Column Stored Index به ازای فیلدهای مورد نیاز ایجاد می‌کنیم. لازم به ذکر است در SQL Server 2012 این نوع ایندکس به شکل Non Clustered Column Stored Index می‌باشد.

CREATE NONCLUSTERED COLUMNSTORE INDEX IX_ColumnStore
 ON Employees_ColumnBased(FirstName,LastName,HireDate)
GO

نکته مهمی که باید در ایجاد این نوع از ایندکس‌ها در نظر گرفت این است که به دلیل افزایش Performance معمولاً در بیشتر مواقع این ایندکس‌ها با توجه به کوئری‌های شما ایجاد می‌گردند. بدین صورتکه

۱- لیست تمامی کوئری‌های پر استفاده به ازای جدول مورد نظر را استخراج نمایید.
۲- کلیه فیلدهای مربوط به مرحله اول را استخراج نمایید.
۳- در صورتیکه فیلدهای استخراج شده در مرحله دوم جزء فیلدهای قابل شرکت در Column Stored Index باشند در ایندکس مورد نظر شرکت نمایند.

۴- در صورتیکه بخواهید Column Stored Index را به صورت ویژوالی در Management Studio ایجاد کافی است مراحل زیر را انجام دهید.

ادامه مطلب...
۳۱ ارديبهشت ۹۴ ، ۲۲:۱۱ ۰ نظر موافقین ۰ مخالفین ۰
حسن فتحی

Column Stored Index

Column Stored Index یکی از قابلیت‌های جالبی است که در SQL Server 2012 ارائه شده است. بوسیله این قابلیت می‌توان سرعت اجرایی کوئری‌های را تا چندین برابر بهبود بخشید.

مایکروسافت مهمترین هدف خود را از ارائه این قابلیت افزایش سرعت اجرای کوئری‌های بر روی Data Warehouseهای بزرگ ذکر کرده است.

 اما می‌توان از آن در شرایطی خاص بر روی OLTP نیز استفاده نمود.

قبل از اینکه به معرفی این قابلیت جدید SQL Server بپردازیم باید شما با مفاهیم اولیه درباره Performance Tuning آشنا شوید.


۱- آشنایی با مفهوم Data File و Log File : همانطور که می‌دانید یک بانک اطلاعاتی در SQL Server حداقل از دو فایل (Data File و Log File) تشکیل شده است. در Data File کلیه اشیائی (مانند فیلد، جدول، ایندکس و…) که شما ایجاد می‌کنید ذخیره می‌شود و به طور ساده در Log File هر چیزی که منجر به تغییر این داده‌ها شود ذخیره می‌شود. برای مثال چنانچه شما مقدار رکوردی را تغییر دهید Log عملیات مربوط به تغییر در Log File ثبت می‌گردد. این Log می‌تواند شامل تصویر داده قبل و بعد از تغییر داده و همچنین زمان انجام کار و… باشد.

۲- آشنایی با مفهوم Page : همانطور که قبلاً هم اشاره کردیم داده‌هایی که شما ایجاد کرده‌اید در درون Data File ثبت می‌شود. درون Data File بلوک‌های ۸KB قرار دارد که به این بلوک‌ها Page می‌گویند. در SQL Server بیش از ۱۰ نوع Page وجود دارد. که SQL Server بر حسب نیاز از آنها استفاده می‌کند.

۳- آشنایی با مفهوم Index در SQL Server: به طور خیلی ساده، ایندکس لیست مرتب شده‌ای از داده‌ها است که بر اساس منطقی خاص مانند عدد، رشته، تاریخ و … ایجاد شده است. هدف از ایجاد ایندکس افزایش سرعت جستجو برای بازیابی داده‌ها می‌باشد.

۴- آشنایی با انواع ایندکس‌ها:

در SQL Server  پنج نوع ایندکس به شرح زیر وجود دارد

• Clustered Index: این نوع ایندکس‌ها بر روی داده‌های عادی مانند عدد، رشته، تاریخ و… ایجاد می‌شوند. زمانیکه یک Clustered Index بر روی یک جدول ایجاد می‌کنید ترتیب و چینش فیزیکی رکوردها بر اساس کلید ایندکس خواهد بود. بنابراین یک جدول صرفاً می‌تواند یک ایندکس از نوع Clustered  داشته باشد.

 

• NonClustered Index: این نوع ایندکس‌ها مانند Clustered Indexها بر روی داده‌های عادی مانند عدد، رشته، تاریخ و… ایجاد می‌شوند. زمانیکه یک ایندکس از نوع NonClustered بر روی جدول ایجاد می‌کنید کلید ایندکس در فضایی دیگری جدای از فضای جدول مرتب شده و مورد استفاده قرار می‌گیرد. به طور کلی در SQL Server می‌توان تا ۹۹۹ ایندکس از نوع NonClustered را ایجاد کرد.

 

• XML Index : این نوع ایندکس‌ها بر روی داده‌هایی  که در قالب ساختار XML هستند ایجاد می‌شود.

 

• Spatial Index : این نوع ایندکس‌ها بر روی داده‌هایی که از نوع جغرافیایی هستند ایجاد می‌شود.

 

• Column Stored Index : نوع جدیدی از ایندکس‌ها هستند که در SQL Server 2012 معرفی شده‌اند که سرعت دسترسی به داده‌ها در آن بیش از سایر ایندکس‌ها می‌باشد.

۵- آشنایی با مفهوم Execution Plan : Plan اجرایی یا نقشه اجرایی کوئری ترتیب اجرای فیزیکی دستورات را مشخص می‌نماید. زمانیکه شما کوئری را اجرا می‌کنید SQL Server آن را به همان ترتیبی که نوشته شده است اجرا نمی‌کند. بلکه ترتیب دسترسی به داده‌های موجود در جداول با توجه به پارامترهای مختلف مانند وضعیت ایندکس‌ها، وضعیت منابع سرور و…  خواهد بود.

پس از مشخص شدن ترتیب اجرای فیزیکی SQL Server نقشه آن را با عنوان Execution Plan ذخیره می‌کند تا در آینده بتواند از آن استفاده کند. چنانچه بخواهید نقشه اجرایی با Execution Plan یک کوئری را مشاهده نمایید کافی است که کوئری مورد نظر خود را Highlight نموده و کلید Ctrl+L را فشاره دهید تا Estimate Plan یا نقشه اجرایی تخمینی برای شما نمایش داده شود.

در تصویر زیر نمونه‌ای از Execution Plan یک کوئری نمایش داده شده است.

SELECT * FROM Orders O
 INNER JOIN [Order Details] OD ON O.OrderID=OD.OrderID
 INNER JOIN Employees E ON O.EmployeeID=E.EmployeeI

نکته : Execution Plan از سمت راست به چپ و از بالا به پایین خوانده می‌شود.

ادامه مطلب...
۳۱ ارديبهشت ۹۴ ، ۲۱:۳۷ ۴ نظر موافقین ۱ مخالفین ۰
حسن فتحی

با Silicon Valley آشنا شوید

حتما شما در بسیاری از خبر ها و یا از دوستان خود کلمه دره سیلیکون و یا به انگلیسی Silicon Valley را دیده و یا شنیده اید در این مقاله شمارا با این دره آشنا و کمپانی های بزرگ دنیایی فناوری را معرفی خواهیم کرد.
 
درهٔ سیلیکون Silicon Valley نام رایج و غیر رسمی منطقه‌ای در حدود 70 کیلومتری جنوب شرقی سانفرانسیسکو در حومهٔ سانتا کلارا، کالیفرنیا، ایالات متحده آمریکا است. شهرت این منطقه به دلیل قرار داشتن بسیاری از شرکت‌های مطرح انفورماتیک جهان در این منطقه‌است. نام این منطقه ابتداً برگرفته از تعداد زیاد شرکت‌های تولید کنندهٔ تراشه های سیلیسیمی در این منطقه بود که بعدها به نمادی از وجود کمپانی‌های زیاد فعّال در زمینه فناوری‌های پیشرفته در این منطقه تبدیل شد. دره سیلیکون شهرهای بسیاری را دربر می گیرد که مهمترین آنها سان خوزه مشهور به پایتخت دره سیلیکون می باشد.
تاریخچه ایجاد این ناحیه را گاراژی می‌دانند که در دههٔ سال 1930 میلادی دو دانشجوی مهندسی دانشگاه استنفورد به نامهای دیوید هیولت و ویلیام پاکارد یا همان اچ‌پی فعالیت خود را در آن آغاز کرده‌بودند. این گاراژ در حال حاضر به‌عنوان نماد درهٔ سیلیکون و محل تولد آن شناخته می‌شود.
 از جمله شرکت‌های بزرگ واقع در این منطقه می‌توان موارد زیر را نام برد:
اینتل
ای ام دی
ادوبی سیستمز
اپل
اسوس
ای بی
گوگل
اچ پی
اوراکل
یاهو
سیسکو سیستمز
انویدیا
سیمانتک
سان دیسک
مایکروسافت (شعبه اصلی این شرکت در سیاتل است)
همکاران واریان
 

منبعWikipedia

۲۴ بهمن ۹۳ ، ۲۳:۱۷ ۰ نظر موافقین ۲ مخالفین ۰
حسن فتحی