جديدترين مقالات مرتبط با مدیریت فناوری اطلاعات
ارسال شده توسط احمد محمدی | 21 02, 2016 | بازدید‌ها (345)

فاکتورهای دامنه

1. سن دامنه: در حقیقت تفاوتی بین دامنه ای که 6 ماه سن دارد با آن که 1 سال، اصلا زیاد نیست. به عبارت دیگر گوگل از سن دامنه استفاده می کند اما چندان مهم نیست.

 2. کلمات کلیدی در دامنه های سطح بالا ظاهر می شود: استفاده از کلمه کلیدی در دامنه باعث ترقی نمی شود اما نشانه مرتبط بودن است. در آخر اینکه آنها کلمات کلیدی را که در دامنه ظاهر می شود بولد ( bold ) می کنند.

 200 فاکتور رتبه بندی گوگل

3. کلمه کلیدی به عنوان اولین کلمه در دامنه: اعضای انجمن فاکتورهای رتبه بندی موتورهای جستجو در سال 2011 توافق کردند، دامنه ای که با کلمه کلیدی هدف خود شروع می شود، نسبت به دامنه ای که در خود کلمه کلیدی ندارد یا کلمه کلیدی در وسط یا انتهای دامنه قرار دارد،سرتر است.

4. ثبت طول دامنه: دامنه های ارزشمند)مشروع( اغلب جلوتر برای چند سال آینده پرداخت شده اند در حالی که دامنه های( نامشروع) به ندرت برای 1 سال استفاده می شوند. بنابراین زمان انقضای دامنه می تواند به عنوان یک فاکتور برای پیش بینی مشروعیت آن مورد استفاده قرار گیرد.

5. کلمه کلیدی در اسم زیردامنه ( Subdomain ): هیئت Moz توافق کردند که وجود کلمه کلیدی در زیردامنه موجب بهبود رتبه شود.

6. تاریخچه دامنه: یک سایت با مالکیت بی ثبات ممکن است از گوگل بخواهد که تاریخچه سایت را مجددا تنظیم کند ( reset ) یا لینک هایی که به دامنه ارجاع می شود را خنثی کند.

7. دامنه دقیقا همتا ( Exact Match Domain ) : اگر سایت باکیفیتی داشته باشید، EMDs می تواند به شما برتری دهد. اما اگر EMDs در یک سایت بی کیفیت اتفاق بیفتد، به آپدیت EMDs آسیب می رساند.

8. دامنه عمومی در برابر دامنه خصوصی: دامنه خصوصی می تواند نشانه یک چیز مخفی باشد. فعال کردن خصوصی سازی بالقوه چیزی بدی نیست، اما اگر خیلی زیاد و در همه چیز اتفاق بیفتد، اندکی غیرعادی به نظر خواهد آمد.

9. جریمه مالک دامنه: اگر گوگل شخصی را به عنوان spammer تشخیص دهد، سایر سایت هایی که متعلق به این شخص است را با موشکافی بیشتر نگاه می کند.

فاکتورهای صفحه

10. گسترش مرز TLD : با داشتن کد کشور برای دامنه به رتبه بندی سایت در آن کشور خاص کمک می کند، اما سایت را در رتبه بندی جهانی محدود می کند.

11. کلمه کلیدی در تگ عنوان: تگ عنوان دومین بخش مهم محتوای صفحه است، در نتیجه سیگنال قوی در سئو on-page ارسال می کند.

12. شروع تگ عنوان با کلمه کلیدی: بر مبنای اطلاعات Moz ، تگ عنوانی که با کلمه کلیدی شروع می شود در مقایسه با تگ عنوانی که کلمه کلیدی در انتهای آن قرار دارد، از کارایی بهتری برخوردار است.

13. کلمه کلیدی در تگ توضیحات:این هم نشانه دیگر مرتبط بودن است و شما را متمایز می سازد.

14. وجود کلمه کلیدی در تگ H1 : تگ H1 دومین تگ عنوان است که سیگنال مرتبط بودن را به گوگل ارسال می کند.

15. کلمه کلیدی عبارتی است که بیشترین استفاده از آن در متن شده: انتخاب کلمه کلیدی که بیشتر از سایر کلمات مورد استفاده قرار گرفته، نشانه مرتبط بودن است.

16. طول محتوا: محتوایی که کلمات بیشتری دارد می تواند سطح گسترده تری را پوشش دهد و به مقالات سطحی و کوتاه ارجحیت دارد.

17. تراکم کلمه کلیدی: تراکم کلمه کلیدی مبنایی است که گوگل از آن برای انتخاب عنوان صفحه استفاده می کند. اما استفاده بیش از حد می تواند به شما آسیب برساند.

18. پنهان سازی معنایی کلمه کلیدی در محتوا: LSI کلمات کلیدی به موتورهای جستجو کمک می کند معنی کلماتی که بیش از یک معنی دارند را بتواند استخراج کند. وجود یا عدم وجود LSI نشانه کیفیت محتوا است.

19. کلمات کلیدی LSI در عنوان و تگ توضیحات: به عنوان محتوای صفحه، کلمات کلیدی LSI در صفحه تگ متا به گوگل در تشخیص بین مترادف ها کمک می کند. همچنین به عنوان یک نشانه مرتبط بودن هم هست.

20. سرعت بارگذاری صفحه از طریق HTML : هم گوگل و هم بینگ از سرعت بارگذاری صفحه به عنوان یک فاکتور رتبه بندی استفاده می کنند. عنکبوت های موتورهای جستجو به راحتی می توانند سرعت سایت شما را بر اساس کدهای صفحه و حجم فایل ها تخمین بزنند.

21. محتوای تکراری: محتوای یکسان در همان سایت می تواند روی دید موتورهای جستجو نسبت به آن سایت تاثیر منفی داشته باشد.

22. نگارش = متعارف: استفاده از این تگ مانع از این می شود که گوگل صفحاتتان را محتوای تکراری محسوب کند.

23. سرعت بارگذاری صفحه از طریق کروم: ممکن است گوگل از داده های کاربران کروم برای کنترل بهتر سرعت صفحه استفاده کند و بهتر است شما برای افزایش سرعت سایت از CDN استفاده کنید.

24. بهینه سازی تصاویر: تصاویر on-page سیگنال مرتبط بودن مهمی از طریق نام فایلش، متن Alt ، عنوان، توضیحات و تیتر به موتورهای جستجو ارسال می کند.

25. تاخیر در به روزرسانی محتوا: در آپدیت های اخیر گوگل ریتم قرار دادن محتوا مخصوصا برای جستجوهایی که حساس به زمان است، اهمیت پیدا کرده. این فاکتور بسیار حائز اهمیت است و گوگل تاریخ آخرین به روزرسانی را برای صفحات خاص نشان می دهد.

26. مقدار به روزرسانی محتوا: مقدار ویرایش و تغییر یک فاکتور تازگی است. افزودن یا حذف کامل یک بخش، نسبت به تغییر مفهوم چندتا از کلمات به روزرسانی چشمگیرتری است.

27. پیشینه به روزرسانی صفحه: در طول زمان، صفحه هر چند وقت یکبار به روزرسانی شده؟ روزانه، هفتگی، هر 5سال یکبار. تناوب به روزرسانی صفحه در تازگی آن تاثیرگذار است.

28. مشهود بودن کلید واژه: داشتن کلید واژه ای که در 100 کلمه اول محتوا ظاهر شود، یک نشانه مرتبط بودن مهم است.

29. کلمه کلیدی در تگ H2, H3 : وجود کلمه کلیدی در زیرعنوان H2, H3 می تواند نشانه کوچکی از مرتبط بودن باشد. هیئت Moz هم با این موضوع موافق است.

30. چیدمان کلمات کلمه کلیدی: تقدم و تاخر در کلمات کلیدی می تواند موجب کسب رتبه بهتر و یا رتبه ضعیف تر شود. بهترین کار این است که از keyword researchاستفاده کنید.

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

32. تم لینک های خروجی: بر اساس Moz ، موتورهای جستجو محتوای صفحه ای که شما به آن لینک کردید را به عنوان نشانه مرتبط بودن مورد استفاده قرار می دهند. به عنوان مثال اگر صفحه شما راجع به ماشین باشد و به صفحه ای که راجع به فیلم است لینک کنید، این کار به گوگل می گوید که صفحه شما راجع به فیلم ماشین ها است نه خودرو.

33. گرامر و املا: گرامر و املای مناسب و صحیح نشانه کیفیت است و حائز اهمیت می باشد.

34. محتوای همزمان: آیا محتوایی که در صفحه تان است اصل می باشد؟ اگر یک بخش یا کپی از کل محتوای یک صفحه ایندکس شده باشد، نمی توانید مانند صفحه اصلی رتبه کسب کنید.

35. محتوای تکمیلی مفید: محتوای تکمیلی مفید شاخصی است برای کیفیت سایت. برای مثال شامل مبدل ارز، ماشین حساب بهره وام و دستورالعمل های تعاملی.

36. تعداد لینک های خروجی: تعداد زیاد لینک های خروجی می تواند به رتبه بندی صفحه تان آسیب بزند.

37. عناصر چندرسانه ای: عکس ها، ویدئوها و سایر عناصر چندرسانه ای می تواند نشانه کیفیت محتوا باشد.

38. تعداد لینک های داخلی صفحه: تعداد لینک های داخلی صفحه نشان دهنده اهمیت مرتبط بودن سایر صفحات سایت است.

39. کیفیت لینک های داخلی صفحه: لینک های داخلی از صفحات معتبر در دامنه، نسبت به صفحاتی که PR ندارند یا ضعیف است، تاثیر بیشتری دارد.

40. لینک های خراب)شکسته(: داشتن تعداد زیادی لینک شکسته در صفحه می تواند نشانه ای از نادیده گرفته شده یا رها شده باشد. ارزیاب اطلاعات گوگل از لینک های خراب برای ارزیابی کیفیت صفحه اصلی استفاده می کند.

41. سطح خواندن: هیچ شکی نیست که گوگل سطح خواندن صفحات وب را تخمین می زند و یک سطح اولیه خوانده می تواند به رتبه صفحه تان کمک کند. سطح خواندن یک فاکتور است که کیفیت سایت را از تولید محتوای آن جدا می کند.

42. لینک های وابسته: لینک های وابسته به خودی خود باعث خراب کردن رتبه شما نمی شوند. اما اگر تعداد آنها خیلی زیاد باشد، ممکن است الگوریتم های گوگل توجه بیشتری به سایر نشانه های کیفیت سایت شما بکند تا اطمینان حاصل نماید که شما یک سایت وابسته نیستید.

43. خطاهای HTML / اعتبار W3C : تعداد زیاد خطاهای HTML یا برنامه نویسی نامرتب می تواند نشانه پایین بودن کیفیت سایت باشد. موضوع بحث برانگیز این است که خیلی ها در سئو فکر می کنند اعتبار W3C ، یک نشانه کیفیت ضعیف است.

44. اعتبار یا قدرت دامنه میزبان صفحه: همه چیز برابر است، یک صفحه در دامنه معتبر، بالاتر از یک صفحه در دامنه کم اعتبار است.

45. رتبه بندی صفحه: کاملا مرتبط نیست اما به طور کلی PR بالاتر صفحه در مقایسه با PR پایین تر منجر به رتبه بهتر می شود.

46. طول URL : طولانی بودن بیش از حد URL ممکن است به دیده شدگی شما در جستجو صدمه وارد کند.

47. راه URL : صفحه ای که به صفحه اصلی نزدیک تر است ممکن است اعتبار بالاتری کسب کند.

48. ویراستاران انسانی: اگرچه هرگز تایید نشده اما گوگل حق انحصاری اختراع یک سیستم را دارد که به ویراستاران انسانی امکان می دهد در SERPs نفوذ پیدا کنند.

49. طبقه بندی صفحه: طبقه ای که صفحه در آن ظاهر می شود یک نشانه مرتبط بودن است. صفحه ای که در یک طبقه مرتبط قرار می گیرد نسبت به صفحه ای که در طبقه ای غیرمرتبط است، امتیاز مرتبط بودن بیشتری کسب می کند.

50. تگ های وردپرس: تگ های خاص وردپرس نشانه مرتبط بودن است. تنها روشی که سئوتان را بهبود می بخشد، مرتبط بودن بخش های مختلف محتوا و همچنین مجموعه ای از پست ها است.

51. کلمه کلیدی در URL : این نشانه دیگر و مهم مرتبط بودن است.

52. رشته URL : طبقه داخل در رشته URL توسط گوگل خوانده می شود و یک سیگنال موضوعی راجع به اینکه صفحه در چه مورد است، ارائه می کند.

53. مراجع و منابع: با استناد به مراجع و منابع، مانند آنچه مقالات پژوهشی انجام می دهد، می تواند نشانه ای از کیفیت باشد. دستورالعمل های کیفیت گوگل می گوید که بازبین ها باید نگاه کردن به یک صفحه چشم شان به منابع باشد: موضوع باید تخصصی و منابع آن معتبر باشد.

54. فهرست های شماره و نشانه دار: فهرست های شماره و نشانه دار کمک می کند تا محتوایتان برای خواننده تفکیک شده باشد. گوگل هم با این کار موافق است و محتواهایی که شماره و نشانه دارد را تعرجیح می دهد.

55. الویت صفحه در نقشه سایت: الویتی که به یک صفحه از طریق فایل sitemap.xml داده می شود می تواند روی رتبه بندی تاثیر بگذارد.

56. تعداد بیش از حد لینک های خروجی: بعضی از صفحات راه به تعداد بسیار زیادی لینک دارند که موجب مبهم شدن صفحه و پرت شدن حواس از محتوای اصلی می شود.

57. مقدار سایر کلمات کلیدی برای رتبه بندی صفحه: اگر صفحه برای چندین کلمه کلیدی رتبه داشته باشد، این امر نشانه داخلی کیفیت برای گوگل است.

58. سن صفحه: اگرچه گوگل محتواهای جدید و صفحات قدیمی که محتوایشان را به طور منظم به روز می کنند ترجیح می دهد اما صفحات جدیدی که کارایی خوبی داشته باشند هم مورد قبول خواهند بود.

59. چیدمان کاربر پسند: وقتی طرح بندی صفحه در بالاترین کیفیت باشد موجب می شود که محتوا بلافاصله قابل مشاهده شود.

60. دامنه های رها شده ( Parked Domains  ) : برمبنای به روزرسانی دسامبر 2011گوگل، دیده شدگی در جستجو برای دامنه های رها شده کاهش یافت.

61. محتوای مفید: گوگل بین محتوای با کیفیت و مفید تمایز قائل می شود.

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

63. صفحه ارتباط با ما: گوگل سایت هایی که اطلاعات تماس با ما مناسبی دارند را ترجیح می دهد و اگر اطلاعات تماس تان منطبق با اطلاعات دامنه تان باشد، پاداش در نظر می گیرد.

64. اعتماد دامنه / رتبه اعتماد: اعتماد سایت توسط لینک هایی که از سایت های معتبر به آن داده می شود مورد سنجش قرار می گیرد. این فاکتور رتبه بندی بسیار حائز اهمیت است.

65. معماری سایت: سایتی که اجزای آن به خوبی در کنار هم قرار گرفته اند و معماری مناسبی دارد به گوگل کمک می کند تا محتوای آن را از نظر موضوعی سازماندهی کند.

66. به روزرسانی سایت: ااینکه هر چند وقت سایت به روزرسانی و محتوای جدید به آن افزوده می شود، فاکتور تازگی سایت است.

67. تعداد صفحات: تعداد صفحات سایت نشانه ضعیفی از اعتبار است. این موضوع به گوگل کمک می کند تا یک سایت بزرگ را از یک سایت وابسته تشخیص دهد.

68. وجود نقشه سایت: نقشه سایت به موتورهای جستجو کمک می کند تا صفحات شما را راحت تر، کامل تر و با قابلیت دیده شدگی بهتر ایندکس کنند.

69. زمان کار سایت ( Uptime ) : زمان خرابی ( downtime ) زیاد سایت به دلیل مسائل مربوط به سرور یا تعمیرات باعث صدمه زدن به رتبه سایت می شود.

70. محل سرور: محل سرور ممکن است محل کسب رتبه سایت را در مناطق جغرافیایی مختلف تحت تاثیر قرار دهد. خصوصا برای جستجوهای جغرافیایی خاص خیلی مهم
است.

71. گواهی SSL : گوگل گواهی SSL را ایندکس می کند و از HTTPS به عنوان نشانه رتبه بندی استفاده می نماید.

72. شرایط استفاده از خدمات و صفحات حفاظت: این دو صفحه به گوگل کمک می کنند تا تشخیص دهد این سایت از اعضای قابل اعتماد اینترنت هست یا نه.

73. اطلاعات متا تکراری در سایت( Duplicate Meta Information On-Site ) وجود اطلاعات متا تکراری در سایت می تواند موجب افت قابلیت دیده شدگی سایت تان شود.

74. راهنمای اطلاعات: این شیوه چیدمان کاربر پسند به کاربر کمک تا بداند در کجای سایت قرار دارد و همچنین از فاکتورهای رتبه بندی است.

75. بهینه سازی سایت برای موبایل: این احتمال وجود دارد که سایت های ریسپانسیو در جستجوهای با گوشی در رتبه بالاتر قرار گیرند. همچنین تگ “ Mobile friendly ” به سایت هایی که در موبایل به درستی نشان داده می شوند افزوده شده است. علاوه بر این گوگل شروع به جریمه سایت هایی که در جستجوی موبایل، mobile friendlyنیستند، نموده است.

76. یوتیوب: بدون شک ویدیوهای یوتیوب در SERPs ترجیح دارد. زیرا موتورهای جستجو دریافتند که بعد از Google Panda سایت YouTube.com بیشترین ترافیک را دارد.

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

78. استفاده از :Google Analytics and Google Webmaster Toolsبرخی فکر می کنند تنها نصب این دو برنامه روی سایت می تواند ایندکس شدن آن را بهبود بخشد. همچنین موجب می شود با دادن اطلاعات بیشتر به گوگل برای کار کردن، رتبه سایت مستقیما تحت تاثیر قرار گیرد.

79. عقیده کاربران / شهرت سایت: عقیده و نظر کاربران در مورد سایت شما کمک بسیاری زیادی می کند تا موتورهای جستجو شهرت و اعتبار شما را افزایش دهند . درج نظر در سایت و فعالیت در آن توسط کاربران باعث افزایش شهرت آن نزد موتورهای جستجو می شود.

فاکتورهای backlink
 
80. لینک کردن سن دامنه: Backlink از دامنه های قدیمی تر در مقایسه با دامنه های جدید بهتر است.

81. تعداد دامنه های لینک شده: تعداد دامنه هایی که به آنها ارجاع داده می شود یکی از فاکتورهای رتبه بندی در الگوریتم گوگل است.

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

83. تگ Alt (برای لینک های تصویری(: متن Alt ورژن تصویری متن anchorاست.

84. اعتبار صفحه لینک شده: اعتبار صفحه ای که به آن ارجاع شده یک فاکتور بسیار مهم در رتبه بندی است.

 85. اعتبار دامنه لینک: اعتبار دامنه ای که به آن ارجاع می شود می تواند نقش مستقلی در اهمیت لینک ایفا کند.

86. لینک از رقبا: لینک از سایر صفحاتی که رتبه بندی شان در SERP برابر است برای رتبه صفحه در یک کلمه کلیدی خاص ارزشمندتر می باشد.

 87. به اشتراک گذاری صفحه ای که به آن ارجاع شده در شبکه های اجتماعی: هرچه صفحه بیشتر به اشتراک گذاشته شود روی ارزش آن موثر است.

88. لینک از Neighborhoods بد(همسایه) : این امر می تواند به سایت شما صدمه وارد کند.

89. پست های مهمان: هرچند پست های مهمان می تواند بخشی از یک کمپین سئو کلاه سفید باشد اما لینک هایی که از پست های مهمان می آید به اندازه لینک های متنی ارزشمند نیست.

90. لینک به دامنه صفحه اصلی که صفحه روی آن نشسته: لینک به صفحه اصلی که به آن ارجاع شده می تواند نقش مهمی در ارزیابی سایت ایفا کند.

91. لینک های یک طرفه: این امر یک بحث مهم در سئو استو عبارت است از اینکه به طور کلی ما از آنها پیروی نمی کنیم.

92. تنوع نوع لینک ها: داشتن درصد بالای غیرمعمول لینک از یک منبع می تواند نشانه webspam باشد.

93. لینک های حمایت شده یا سایر کلمات اطراف لینک: کلماتی مانند اسپانسر، شرکای لینک و لینک های حمایت شده، می تواند ارزش لینک شما را کم کند.

94. لینک های متنی: لینک هایی که داخل محتوای یک صفحه جاسازی شده اند در مقایسه با لینک هایی که در یک صفحه خالی یا هرجایی از صفحه قرار دارند، قدرتمندتراند. یک مثال خوب از لینک متنی، بکلینک از گستوگرافیک است.

95. تعداد بیش از حد تغییر مسیر 301 به صفحه: لینک هایی که از تغییر مسیر 301می آید باعث ضعیف شده برخی یا تمام PR می شود.

96. متن Anchor بکلینک: Anchor معمولا توضیح دقیق تری از صفحه وب ارائه می دهد نسبت به خود صفحه.

97. متن لینک Anchor داخلی: این متن نشانه دیگر مرتبط بودن است، اگرچه متفاوت از متن Anchor بکلینک است. متن Anchor در مقایسه با قبل از اهمیت کمتری برخوردار است اما همچنان نشانه ضعیفی از مرتبط بودن است.

98. اختصاص دادن عنوان لینک: عنوان لینک به عنوان یک نشانه ضعیف مرتبط بودن استفاده می شود.

99. TLD کشوری که دامنه به آن ارجاع شده: لینک گرفتن از کشورهایی که پسوند دامنه شان سطح بالا است. de, .cn, .co.uk به شما در کسب رتبه بهتر در آن کشور کمک می کند.

100. محل لینک در محتوا: بهتر است لینک را در ابتدای محتوا بیاورید تا در انتهای آن.

101. محل لینک در صفحه: این که لینک در کجای صفحه ظاهر می شود مهم است. عموما لینک هایی که در محتوا جاسازی می شود قدرتمندتر از لینک هایی است که در حاشیه بالایی، پایینی یا کناری صفحه قرار می گیرد.

102. مرتبط بودن دامنه لینک: لینک از سایتی که فعالیت مشابه شما دارد خیلی موثرتر از سایت غیرمرتبط است.

103. میزان مرتبط بودن صفحه: لینک از صفحه ای که خیلی به محتوای صفحه شما نزدیک است بسیار قدرتمندتر از یک صفحه غیرمرتبط است.

104. متن اطراف دیدگاه لینک: گوگل تشخیص می دهد لینکی که به سایت تان فرستاده شده یک پیشنهاد است یا یک بررسی منفی. لینک هایی که در اطراف شان دیدگاه مثبت وجود دارد قدرتمندتر هستند.

105. کلمه کلیدی در عنوان: گوگل علاقه مضاعف به لینک هایی دارد که در عنوان شان کلمه کلیدی آن صفحه را دارند.

106. سرعت لینک مثبت: سایتی که سرعت لینک مثبت دارد معمولا افزایش SERP به دست می آورد.

107. سرعت لینک منفی: سرعت لینک منفی می تواند به طور چشمگیری رتبه تان را کاهش دهد زیرا نشانه کاهش محبوبیت است.

108. لینک از صفحات “ Hub ”: گرفتن لینک از صفحاتی که در مورد یک موضوع خاص منابع تاپ (or hubs) محسوب می شوند، به شما یک treatment خاص می دهد.

109. لینک از سایت های معتبر: لینک از سایت هایی که معتبر محسوب می شوند نسبت به سایت های کوچک و با فعالیت اندک، موجب محبوبیت بیشتری برایتان می شود.

110. لینک کردن به عنوان منبع ویکیپدیا: اگرچه لینک ها یک طرفه اند اما بسیاری فکر می کنند گرفتن لینک از ویکیپدیا باعش افزایش اطمینان و اعتبار از دید موتورهای جستجو می شود.

111. همکاری ظهور: کلماتی که اطراف بکلینک ظاهر می شوند به گوگل کمک می کنند تا بداند این صفحه راجع به چیست.

112. سن بکلینک: بر اساس یک Google patent لینک های قدیمی تر در مقایسه با لینک های جدید از قدرت بیشتری در رتبه بندی برخوردار هستند.

113. لینک از سایت های واقعی در مقایسه با صفحات ساختگی: گوگل امتیاز بیشتری به لینک هایی که از سایت های واقعی است در مقایسه با وبلاگ های ساختگی می دهد. گوگل از نام تجاری و تعامل کاربران به عنوان نشانه ای برای تشخیص این دو نوع سایت استفاده می کند.

114. مشخصات لینک طبیعی: یک سایت با مشخصات لینک طبیعی رتبه بالاتری خواهد گرفت و برای به روزرسانی هم ماندگارتر است.

115. لینک های متقابل: Google’s Link Schemes صفحاتی که تبادل لینک بیش از حد دارند به عنوان یک طرح لینک برای جلوگیری لیست کرده است.

116. لینک های محتوایی تولیدشده توسط کاربران: گوگل می تواند لینک هایی که توسط UGC یا صاحب یک سایت واقعی تولید شده را تشخیص دهد و بین این دو تفاوت زیادی وجود دارد.

117. لینک از 301 : لینک از تغییر مسیر 301 در مقایسه با لینک مستقیم ممکن است اندکی به خوشنامی تان خدشه وارد کنند هر چند که هر دو لینک شبیه هم هستند.

118. میکروفرمت Schema.org : صفحاتی که میکروفرمت را پشتیبانی می کنند نسبت به آنهایی که نمی کنند، رتبه بالاتری خواهند گرفت. این امر منجر به افزایش مستقیم یا SERP CTR بالاتر می شود.

119. لیست DMOZ : بسیاری بر این باورند که گوگل لیست سایت های DMOZ را برای اطمینان بیشتر ارائه می کند.

120. رتبه اطمینان سایت لینک دهنده: سطح اعتماد سایتی که به شما لینک می کند، مشخص می نماید که چقدر رتبه اطمینان به سایت شما منتقل می کند.

121. تعداد لینک های خروجی در صفحه: رتبه صفحه محدود است. یک لینک در صفحه با 100 ها OBLs، PR کمتری را در مقایسه با صفحه ای که تنها تعداد کمی OBLs دارد، قبول می کند.

122. بازارهای نمایش لینک: به دلیل سطح spamming ممکن است گوگل به شکل قابل توجهی لینک های از بازارهای نمایش را بی ارزش کند.

123. تعداد کلمات محتوای لینک: لینک از پستی که 1000 کلمه دارد ارزشمندتر از لینکی است که در یک متن 25 کلمه ای قرار دارد.

124. کیفیت محتوای لینک دهنده: لینک از یک نوشته بی کیفیت یا تکراری از نظر ارزش با یک محتوای چندرسانه ای و با کیفیت برابر نیست.

125. لینک های صفحات ویژه ( Sitewide ) : لینک های صفحات ویژه “فشرده شده” هستند و تنها یک لینک محسوب می شوند.

126. کلیک طبیعی از طریق میزان برای یک کلمه کلیدی: صفحاتی که کلیک بیشتری در CTR می گیرند ممکن است برای یک کلمه کلیدی خاص افزایش SERP داشته باشند.

127. CTR طبیعی برای تمامی کلمات کلیدی: CTR طبیعی صفحه برای تمامی کلمات کلیدی موجب کسب رتبه می شود برای نشانه تعامل با کاربر.


فاکتورهای تعامل با کاربر
 
128. نرخ خروج: نرخ خروج روشی است که گوگل از آن برای تست کیفیت صفحه استفاده می کند. بی شک وقتی افراد سریعا از صفحه خارج می شوند آن صفحه خوب نیست.

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

130. ترافیک بازگشتی: گوگل برسی می کند که آیا افراد پس از مشاهده سایت یا صفحه مجددا به آن باز می گردند یا خیر. سایت هایی که بازدیدکننده ها مکررا از آن بازدید می کنند رتبه بهتری دریافت خواهند کرد.

131. سایت های بلاک شده: گوگل استفاده از این ویژگی را در کروم متوقف کرده اما Panda همچنان از آن به عنوان نشانه کیفیت استفاده می کند.

132. Bookmarks کروم : گوگل اطلاعات کروم را جمع آوری می کند. صفحاتی که در کروم Bookmarks دریافت می کنند افزایش رتبه خواهند داشت.

133. اطلاعات نوار ابزار ( Toolbar ) گوگل: گوگل از اطلاعات نوار ابزار به عنوان نشانه ای برای رتبه بندی استفاده می کند. علاوه بر سرعت بارگذاری صفحه و نرم افزارهای مخرب مشخص نیست که گوگل چه اطلاعاتی از نوار ابزار استفاده می کند.

134. تعداد نظرات: صفحه ای که تعداد زیادی کامنت در آن وجود دارد نشانه تعامل با کاربر و کیفیت سایت است.

135. زمان سکون ( Dwell Time ) : گوگل توجه زیادی به Dwell Time می کند یعنی میزان زمانی که افراد بعد از آمدن از جستجوی گوگل به صفحه شما در آن سپری می کنند. هرچه افراد زمان بیشتری سپری کنند نشانه کیفیت بالاتر سایت شماست.

136. تازگی سزاوار پرسش: گوگل به صفحات جدید برای جستجوهای خاص یک بهبود رتبه می دهد.

137. تنوع سزاوار پرسش: ممکن است گوگل برای کلمات کلیدی مبهم تنوعی به SERP اضافه کند، مانند : Ted WWF یا ruby قوانین الگوریتم های خاص

138. تاریخچه جستجوی افراد: سایت هایی که موقع ورود به گوگل اغلب آنها را بازدید می کنید SERP bump برای جستجوی شما دریافت می کنند.

139. تاریخچه جستجوی کاربران: زنجیره جستجو، نتایج را برای جستجوهای بعدی تحت تاثیر قرار می دهد.

140. هدف قرار دادن ژئو: گوگل به سایت هایی که IP سرور منطقه ای و نام دامنه خاص یک کشور دارد، گوگل به آنها ترجیح می دهد.

141. جستجوی ایمن: نتایج جستجو با کلمات دشنام یا محتواهای مربوط به بزرگسالان برای افرادی که جستجوی ایمن را فعال می کنند، نشان داده نمی شود.

142. گوگل پلاس سیرکل: گوگل نتایج بیشتری را برای نویسندگان و سایت هایی که شما به گوگل پلاس سیرکل افزوده اید، نشان می دهد.

143. شکایات DMCA : گوگل صفحاتی که شکایات DMCA دارد را کاهش رتبه ( downranks ) می دهد.

144. تنوع دامنه: به روزرسانی به اصطلاح Bigfoot دامنه های بیشتری را به هر صفحه SERP می افزاید.

145. جستجوهای معامله ای: گاهی گوگل نتایج متفاوتی برای کلمات کلیدی مربوط به خرید مانند پرواز، نمایش می دهد.

146. جستجوی منطقه ای: گوگل معمولا جستجوی منطقه ای گوگل پلاس را در بالایSERP طبیعی قرار می دهد.

147. باکس اخبار گوگل: کلمات کلیدی مشخص باعث یک باکس اخبار گوگل می شود.

148. ارجحیت برندهای بزرگ: گوگل برای جستجوهای مشخص و کوتاه به برندهای بزرگ کمک می کند.

149. نتایج خرید: گوگل گاهی نتایج خرید گوگل را در SERPs طبیعی نمایش می دهد.

150. نتایج یک سایت برای برندها: دامنه یا کلمات کلیدی برند منجر به چندین نتیجه برای یک سایت می شود.

سیگنالهای شبکه های اجتماعی

151. تعداد تویت ها ( Tweets ) : لایک کردن لینک و تویت کردن صفحه بر رتبه آن در گوگل هم تاثیر می گذارد.

152. اعتبار حساب کاربری کاربران تویتر: تویت شدن توسط یک صفحه معتبر و قدیمی که میلیون ها دنبال کننده دارد در مقایسه با یک صفحه جدید و کم تاثیر، خیلی تاثیرگذارتر است.

153. تعداد لایک های فیسبوک: اگرچه گوگل بسیاری از اکانت های فیسبوک را نمی بیند اما تعداد لایک هایی که یک صفحه در فیسبوک می گیرد را به عنوان نشانه ضعیفی برای رتبه بندی محسوب می کند.

154. به اشتراک گذاری در فیسبوک: به اشتراک گذاری در فیسبوک به دلیل آنکه بیشتر شبیه بکلینک است نسبت به لایک تاثیر بیشتری دارد.

155. اعتبار حساب کاربری کاربران فیسبوک: همانند تویتر لایک ها و به اشتراک گذاشتن هایی که توسط یک صفحه محبوب باشد تاثیرگذارتر است.

156. پین های Pinterest: Pinterest یک اکانت رسانه های اجتماعی محبوب با اطلاعات عمومی زیاد است. گوگل پین های Pinterest را یک سیگنال اجتماعی به حساب می آورد.

157. رای های سایت های به اشتراک گذاری شبکه های اجتماعی: گوگل از به اشتراک گذاری در سایت های Reddit, Stumbleupon, Digg به عنوان یک سیگنال اجتماعی استفاده می کند.

158. تعداد گوگل پلاس: اگرچه اظهار داشتند که گوگل پلاس تاثیر مستقیمی ندارد اما باورش سخت است که آنها شبکه اجتماعی خودشان را رد کنند.

159. اعتبار حساب کاربری کاربران گوگل پلاس: منطقی است که گوگل تاثیر بیشتری به اکانت های معتبر نسبت به اکانت های کم فالور بدهد.

160. اصل شناخته شده: در نتایج جستجو اطلاعاتی که مربوط به پروفایل های آنلاین تایید شده است نسبت به محتواهای بدون تایید رتبه بالاتری خواهد داشت.

161. نشانه های اجتماعی مرتبط بودن: گوگل از اکانتی که محتوا را به اشتراک گذاشته و متنهای اطراف لینک به عنوان اطلاعات مرتبط بودن استفاده می کند.

162. سطح سیگنال های اجتماعی سایت: گسترش نشانه های اجتماعی سایت موجب افزایش اعتبار کلی سایت و در نتیجه دیده شدگی بیشتر در جستجوها می شود. نشانه های برند

163. متن Anchor اسم برند: متن Anchor بسیا ساده است اما یک سیگنال برند بسیار قوی است.

164. جستجوهای برند: خیلی ساده است، افراد برندها را جستجو می کنند. اگر افراد سایت شما را در گوگل جستجو کنند، گوگل به این موضوع در تعیین یک برند توجه می کند.

165. سایت باید صفحه فیسبوک و لایک داشته باشد: برندها باید صفحه فیسبوک با تعداد لایک زیاد داشته باشند.

166. سایت باید پروفایل تویتر با فالورهای زیاد داشته باشد: پروفایل تویتر با فالورهای زیاد نشانه محبوبیت یک برند است.

167. صفحه رسمی لینکدین: اغلب کسب و کارهای واقعی صفحه لینکدین دارند.

168. لیست کارمندان در لینکدین: داشتن پروفایل لینکدینی که نشان دهد این افراد برای کمپانی شما کار می کنند یک نشانه برند بودن است.

169. قانونی بودن اکانت شبکه اجتماعی: یک شبکه اجتماعی با 10000 فالور و 2 تا پست متفاوت است با یک اکانت 10000 فالوری قدرتمند با تعاملات بسیار.

170. اشاره کردن ( Mention ) به برند در سایت های خبری: برندهای واقعا بزرگ در سایت های خبری گوگل همیشه منشن می شوند. حتی برخی از برندها فید خبری گوگل خودشان را دارند.

171. اشاره متقابل: برندها منشن می شوند بدون اینک به آنها لینک داده شود.

172. تعداد مشترکین RSS : با توجه به اینکه گوگل صاحب سرویس محبوب – Feedburner RSS است، از اطلاعات مشترکین RSS به عنوان نشانه برند بودن و محبوبیت استفاده می کند.

173. محل سکونت با فهرست منطقه ای گوگل پلاس: یک کسب و کار واقعی دارای دفتر است. گوگل از اطلاعات محل سکونت برای تشخیص اینکه یک سایت برند است یا خیر استفاده می کند.

174. وبسایت جزو کسب و کارهای پرداخت کننده مالیات است: گوگل نگاه می کند که آیا سایت جزو کسب و کارهای پرداخت کننده مالیات است یا نه.

فاکتورهای On-Page (Web Spam)
 
175. مجازات پاندا: سایت هایی که کیفیت محتوای آن پایین است بعد از مجازات پاندا در جستجو کمتر دیده می شود.

176. لینک به Neighborhoods بد: لینک کردن به سایت های غیرمرتبط به دیده شدگی شما در جستجو آسیب می زند.

177. تغییر مسیر: تغییر مسیر اصلا نباید اتفاق بیفتد. زیرا نتنهاموجب جریمه بلکه باعث ایندکس شدن مجدد هم می شود.

178. پاپ آپ یا تبلیغات پرت کننده حواس: پاپ آپ یا تبلیغات پرت کننده حواس نشان دهنده پایین بودن کیفیت سایت است.

179. بهینه سازی بیش از حد سایت: شامل فاکتور های on-page مانند انباشتن کلمات کلیدی و تگ عنوان و چیدمان افراطی کلمات کلیدی.

180. بهینه سازی بیش از حد صفحه: بسیاری از افراد گزارش کردند که پاندا را دوست ندارند در نتیجه پنگوئن صفحه را به شکل تکی مدنظر قرار داد.

181. تبلیغات بالای فلد ( Fold ) : الگوریتم طرح بندی صفحه سایت هایی را که تبلیغات زیاد و محتوای کم در بالای Fold )حاشیه( دارند را جریمه می کند.

182. پنهان کردن لینک های وابسته: تلاش زیاد برای پنهان کردن لینک های وابسته می تواند منجر به یک جریمه شود.

183. سایت های وابسته: واضح است که گوگل طرفدار سایت های وابسته نیست و سایت هایی که با لینک های وابسته پول در می آورند بیشتر تحت نظر هستند.

184. تولید خودکار محتوا: گوگل طرفدار تولید خودکار محتوا نیست و اگر شک کند که سایت شما محتوای تولید شده کامپیوتری منتشر می کند، این امر منجر به جریمه و ایندکس شدن مجدد می شود.

185. آدرس IP به عنوان اسپم علامت زده شود: اگر آدرس IP سرور اسپم شود ممکن است به کل سایت روی سرور آسیب بزند.

186. اسپم شدن تگ متا: انباشته شدن کلمه کلیدی در تگ متا هم می تواند اتفاق بیفتد. اگر گوگل فکر کند که شما کلمه کلیدی را به تگ متا افزوده اید تا با الگوریتم گوگل بازی کنید ممکن است سایت تان را جریمه کند.

فاکتورهای Off-Page (Web Spam)

187. هجوم غیر طبیعی لینک ها: هجوم ناگهانی لینک ها نشانه مطمئنی از لینک های ساختگی است.

188. مجازات پنگوئن: سایت هایی که مورد مجازات پنگوئن قرار گرفته اند به طور قابل توجهی در جستجو کمتر دیده می شوند.

189. مشخصات لینک با درصد بالای کیفیت پایین: بسیاری از لینک های از منابع، معمولا با استفاده از سئو کلاه سیاه است و نشانه بازی کردن با سیستم است.

190. ارتباط دامنه لینک کننده: سایت هایی که تعداد خیلی غیرعادی زیادی لینک از سایت های غیرمرتبط دارند برای پنگوئن حساسیت برانگیزند.

191. هشدار لینک های غیرطبیعی: گوگل هزاران اخطار Google WebmasterTools و پیام کشف لینک های غیرطبیعی ارسال کرد. این معمولا پیش از افت رتبه اتفاق می افتد)البته نه % 100 مواقع)

192. لینک از C IP کلاس یکسان: گرفتن حجم غیرطبیعی لینک از سایت هایی با IPسرور یکسان می تواند نشانه ساخت لینک شبکه وبلاگ باشد.

193. متن Anchor سمی: داشتن متن Anchor سمی می تواند نشانه اسپم یا سایت هک شده باشد. همچنین می تواند به رتبه سایت هم آسیب برساند.

194. راهنمای مجازات: گوگل راهنمای مجازات هایش را منتشر کرده، مانند مجازات علنی Interflora

195. فروش لینک: فروش لینک قطعا می تواند روی رتبه نوار ابزارتان تاثیر بگذارد و به دیده شدگی تان در جستجو آسیب بزند.

196. Sandbox گوگل : سایت های جدیدی که یکدفعه حجم زیادی از لینک دریافت می کنند گاهی در Sandbox گوگل قرار می گیرند که موجب می شود دیده شدگی آنها در جستجو به طور موقت محدود شود.

 197. رقص گوگل: رقص گوگل به طور موقت رتبه بندی ها را تکان می دهد. این روشی است برای تشخیص اینکه آیا یک سایت سعی دارد با الگوریتم های گوگل بازی کند یا نه.

198. ابزار Disavow : استفاده از ابزار Disavow می تواند باعث حذف جریمه دستی یا الگوریتمی سایت هایی که قربانی سئو منفی بودند، شود.
 
199. درخواست تجدید نظر :درخواست تجدید نظر موفق می تواند باعث برداشته شدن جریمه شود.
 
200. طرح های لینک موقت: گوگل لینک های غیر معتبر و ساخته شده توسط خود افراد را شناسایی و به سرعت حذف می کند.
ارسال شده توسط احمد محمدی | 9 02, 2016 | بازدید‌ها (388)

مایکروسافت قبل از معرفی  Entity Framework   ، تکنولوژیهای ado , rdo  و سرانجام ado.net  را ارایه کرده بود و برای اکثر این تکنولوژیها زمان زیادی گذاشته بود ، هر کدام از اینها در زمان خود یک تکنولوژی نوینی و حرکت عظیمی بود . اما با گسترش مفاهیم شی گرایی و نیاز مبرم برنامه نویسان به ایجاد اشیا از داده ها و جداول بانکهای اطلاعاتی مایکروسافت اقدام به توسعه تکنولوژی  ado.net کرد و ابتدا امکانات linq  و سپس  Entity Framework  را برای تعامل بهتر با شی گرایی مطرح کرد .

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

ابتدا فهرستی از ابزارهای مدل سازی را معرفی می کنم :

 

1-ERM 
یا  Entity Relationship Model ابزاری برای مدل سازی پایگاههای داده ای رابطه ای .

2- UML 
یا Unified Modeling Language زبان استاندار ماژول سازی اشیا و کلاسها

3-ORM 
یا  Object-Relational Mappingروشی و ابزاری برای ایجاد تعامل ماژولار میان اشیا بانکهای اطلاعاتی رابطه ای و زبانهای برنامه نویسی شی گرا

4-DFD
یا Data Flow Diagram  ابزاری برای نمایش نموداری از جریان داده ها و فرآیند سیستم

 

البته چند ORM  دیگر هم وجود دارد یکی NHibernate و SPRINT.net هر دوتای آنها از جاوا مشتق شده اند و توانمنیدهای فراوانی دارند اما بحث ما Entity  Framework.Net4       است .

البته لیست بالا لیست کاملی نیست و از حوصله این بحث خارج است .

 

قبل از ورود به بحث Entity Framework  مقدمه ای در مورد Entity Data Model یا مختصرا EDM  باید بیان شود .EDM  در حقیقت پایه و پیش نیاز Entity Framework است و شامل سه model  است

1-
مدل مفهومی 2-مدل منطقی 3-مدل ذخیره سازی یا فیزیکی

ما می توانیم بگوییم که EDM  یک نسخه تکامل یافته ERM  است .ما در مدل EDM  در مورد ساختار شی گرای business objects داده ها بحث می کنیم در حالی که در مدل ERM  ما در مورد طرح بانک اطلاعاتی بحث می کنیم .که باید تفاوت میان مدل داده و مدل شی را متوجه شویم ، شکل زیر یک مدل داده را نشان می دهد در حالی که شکل بعدی مدل شی گرا از بانک اطلاعاتی ما را نشان می دهد.







Entity 
چیست ؟

ما برای فهم Entity Framework  باید ابتدا مفهوم Entity  را متوجه شویم ، البته بعدا در مورد این مفصلا خواهم نوشت ولی فعلا برای فهم بیشتر مقایسه ای با object  و relational data  انجام می دهم

تشابه Entity  با شی یا object

1-   Entity
مانند شی دارای انواع تعریف شده برای داده ها و فیلدها است

2-  Entity 
مانند شی دارای خصوصیت یا properties است

3-   
هر    Entity  یک هویت متمایزی دارد

4-   
یک خصوصیت   Entity  می تواند ارجاعی به Entity  دیگر باشد

 

تفاوت Entity  با شی یا object

1 -Entity 
می تواند یک فیلد اصلی یا primary keys داشته باشد

2-Entity 
می تواند دارای ارتباطی با Entity  دیگر باشدمانند ارتباطات موجود در بانک اطلاعاتی

 

تشابه Entity  با داده رابطه ای relational data

1-Entity 
یک ارتباط چند گانه مانند داده ها با دیگر entity  می تواند داشته باشد

2-Entity   
مانند داده ها می تواند کلید اصلی یا primary key داشته باشد

 

تفاوت Entity  با داده رابطه ای relational data

1-Entity 
از داده ها با نوع پیچیده  complex typesپشتیبانی می کند

2-Entity 
از وراثت موجود در کلاسها پشتیبانی می کند

3-Entity 
داده های فیزیکی را ذخیره نمی کند .

 

پس Entity  Framework   چیست ؟

درواقع Entity Framework   تکنولوژی توسعه یافته ADO.Net  است که فاصله بین برنامه نویسی شی گرایی و بانک اطلاعاتی رابطه ای را پر می کند .این فاصله معمولا تحت عنوان عدم تطابق شناخته می شود. و یک تکنیک برنامه نویسی برای تبدیل ارتباطات در Database به مفاهیم Object Oriented در برنامه نویسی است. در واقع می‌توان گفت که کلا‌س ها را به Table ها map می‌کند. وقتی که شما می‌خواهید به Database دسترسی پیدا کنید، یا اطلاعاتی را ذخیره کنید، این کارها را مستقیما بر‌ روی اشیاء ( Object تان ) انجام می‌دهید. Entity  Framework مدل داده ها را به سه بخش تقسیم می کند 1-مدل مفهومی یا ادراکی 2-مدل منطقی 3- مدل فیزیکی

 

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

از مهمترین امکانات اضافه شده به Entity Framework 4 بصورت 2 مورد زیر است :

1-Model-first : به شما اجازه می دهد که ابتدا یک empty model ایجاد کنید ، و ابتدا model خودتان را تعریف کنید و سپس بانک اطلاعاتی و mapping و کلاسها را  بر اساس model تعریف شده ایجاد کنید .

2-Code-only: به شما اجازه می دهد که برای استفاده از Entity Framework  با استفاده از Plain Old CLR Objects یا مختصرا

POCO  درواقع Entity  خود را بدون استفاده از فایل EDMX ایجاد کنید .

اکنون برای یادگیری ابتدایی سعی می کنم ابتدا بر اساس اینکه بانک اطلاعاتی موجود است یک مدل طراحی می کنیم و بعدا با مدلی سرو کار خواهیم داشت که بر عکس یعنی اول مدل بعد بانک اطلاعاتی

آموزش حالت database-first approach

ما در اینجا با بانک اطلاعاتی northwind آموزش را ارایه می دهم با sql-server 2008 R2  و Visual Studio 2010  و دانت نت 4

شما می توانید از لینک زیر بانک اطلاعاتی را دانلود کنید .

خوب اکنون پس از نصب بانک اطلاعاتی سراغ vs  برویم و یک پروژه Windows Forms Application ایجاد می کنیم مطمن باشید که  .Net Framework 4  انتخاب شده باشد.

اکنون در پروژه ، سراغ منوی Project   بروید و گزینه  Add New Item را انتخاب کنید  مانند شکل زیر
Entity_Framework3 - Entity Framework 4  part 1 - متا

در شکل بالا دقت کنید که از قسمت سمت راست گزینه data  را انتخاب کنید و سپس گزینه ADO.NET Entity Data Model

را انتخاب کنید .با انتخاب این گزینه و وارد کردن نام مناسب ( در اینجا ما همان نام Model1.edmx را بصورت پیش فرض قبول می کنیم ) و دکمه Add را می زنیم .پس از آن وارد ویزارد Entity Data Model Wizard می شویم در این ویزارد ما گزینه

    Generates from database را انتخاب می کنیم و به مرحله بعدی می رویم .در این صفحه مطابق شکل زیر :
Entity_Framework4 - Entity Framework 4  part 1 - متا

ما ابتدا باید مقدار connections را مشخص کنیم پس بر روی دکمه New Connection  کلیک کنید تا وارد صفحه Connection Properties بشوید در این صفحه ابتدا از قسمت نام سرور server name  نام سرور بانک اطلاعاتی را انتخاب کنید و برحسب تنظیمات دستگاه شما از لیست بانکهای اطلاعاتی نام بانکnorthwind  را انتخاب کنید .صفحه ویزارد شما مشابه شکل زیر خواهد شد .در این صفحه تیک مقابل جمله save entity connection ….. باعث می شود که رشته اتصال به بانک اطلاعاتی با همان نام مشخص شده در زیر آن در فایلی تحت عنوان App.config  ذخیره شود .اکنون به مرحله بعد می رویم مطابق شکل زیر

Entity_Framework5 - Entity Framework 4  part 1 - متا

خوب اکنون در صفحه بالا جدولهای و view  ها و stored Procedure های بانک اطلاعاتی شما لیست می شوند.

در اینجا ما جدول Category  و جدول products را انتخاب می کنیم و از قسمت view ها Products by Category را انتخاب می کنیم همچنین از stored procedure هم SalesByCategory را انتخاب می کنیم . و سپس دکمه finish  را کلیک می کنیم .

نکته : حتما قبل از زدن دکمه finish دو تیک Pluralize  و include foreign…  را دیدید

Pluralize or singularize از مهمترین بهبودها در نسخه 4 EF است .در نسخه های قبلی EF  خاصیت

Entity Set Name and Entity Name properties  با یک نام بودند که این مساله باعث گیجی برنامه نویس می شد که خوشبختانه در این نسخه 4 امکان تفکیک براحتی فراهم شده است مثلا برای

category به شکل زیر دفت کنید

Entity_Framework6 - Entity Framework 4  part 1 - متا

و در نهایت شما فایل module1.edmx  را باز کنید که مطابق شکل زیر نمای جداول بانک اطلاعاتی رادر فضای ماژولار EDM نمایش می دهد ،

Entity_Framework7 - Entity Framework 4  part 1 - متا
Model-First Approach
در مطالب قبلی در مورد Entity  و نحوه استفاده از ویزارد برای تولید کلاس در صورت وجود بانک صحبت کردم ، اما امروز می خواهم در مورد حالتی صحبت کنم که ما مدل کلاسها را ترسیم می کنیم و از این مدل می خواهیم بانک اطلاعاتی را ایجاد کنیم ، این ویژگی از جالبترین و مهمترین ویژگیهای اضافه شده در EF4 است که مایکروسافت آن را اضافه کرده است .

مانند مقاله بخش 2 ، یک پروژه تحت ویندوز باز کنید ،از منوی Project  کزینه Add New Item  و سپس گزینه ADO.NET Entity Data Model را انتخاب کنید اما از پنجره ظاهر شده در زیر گزینه empty model را انتخاب کنید
Entity_Framework8 - Entity Framework 4  part 1 - متا

ماژول خالی برای شما ایجاد می شود ، اکنون جعبه ابزار   را باز کنید و ابزار زیر را مشاهده کنید .Entity_Framework9 - Entity Framework 4  part 1 - متا

ابزارهایی را مشاهده می کنید که مختصرا آنها را توضیح می دهم.

Entity  : به شما اجازه می دهد که یک  Entity  را ایجاد و طراحی کنید

Association : برای تعریف و ایجاد روابط میان دو عنصر Entity

Inheritance  : برای ایجاد رابطه وراثت بین عناصر و کلاسهای Entity

 زیاد نگران نباشید در ادامه مفصلا در مورد سه عنصر بالا توضیح خواهم داد. فعلا هدف آشنایی کلی با مفاهیم است .پس اکنون دست به کار می شویم و اولین entity  را با استفاده از جعبه ابزار ایجاد می کنیم .یک Entity  را از جعبه ابزار انتخاب کنید و آن را با کشیدن و رها کردن بر روی صفحه خالی ماژول بیاورید .

Entity_Framework10 - Entity Framework 4  part 1 - متا

اکنون به اولین Entity  ایجاد شده دقت کنید .

. یک properties  دارد با نام Id است علاوه بر آن این خصوصیت یک primary Key  برای این Entity  ایجاد شده است .شما می توانید با انتخاب آن از شکل خصوصیات و پارامترهای آن را عوض کنید .پس از تنظیم پارامترهای دلخواه ، شما می توانید بر حسب نیازتون عناصر دیگری  به Entity   اضافه کنید . برای اینکار کافیست برروی Entity کلیک راست کنید و گزینه Add  را انتخاب کنید .

Entity_Framework11 - Entity Framework 4  part 1 - متا

اگر دقت کنید با دو گزینه scalar property , complex property  مواجه می شویم ، شما نگران نباشید از بخش بعدی یعنی بخش چهارم وارد جزییات خواهیم شد و موارد را به تفصیل شرح خواهم داد .

اکنون شما گزینه scalar property  را انتخاب کنید نام آن را  CustomerFirstName قرار دهید و نوع آن یعنی Type  را از نوع کارکتری یعنی  string  انتخاب کنید و بقیه را مطابق شکل زیر


Entity_Framework12 - Entity Framework 4  part 1 - متا

و سپس خصوصیات دیگری را مطابق لیست زیر با نوعهای مشخص شده مانند حالت بالا اضافه کنید

 CustomerLastName (String)

 CustomerAddress (String)

 CustomerCity (String)

 CustomerState (String)

 CustomerZipCode (String)

 CustomerPhone (String)

 ModifyDateTime (DateTime)

سپس یک Entity دیگر ایجاد کنید و عناصر زیر را به آن اضافه کنید

OrderID (int32)

 CustomerID (int32)

 ItemID (int32)

 ModifyDateTime (DateTime)

اکنون ما 2 Entity  داریم ، حالا می خواهیم یک ارتباط بین این 2 برقرار کنیم برای اینکار  از جعبه ابزار Associtation  را انتخاب کنید و سپس از Entity1  فیلد Id  را انتخاب کنید و از Entity2   فیلد customerId  را انتخاب کنید رابطه شما بین این دو فیلد مانند شکل زیر خواهد شد .


Entity_Framework13 - Entity Framework 4  part 1 - متا

اکنون نوبت ایجاد بانک اطلاعاتی از مدول و کلاسهای بالا است . اکنون بر روی فضای خالی از صفحه مازول کلیک راست بزنید و گزینه Generate Database From Model  را انتخاب کنید صفحه زیر نمایش داده می شود .


Entity_Framework14 - Entity Framework 4  part 1 - متا

در اینجا شما باید بانک اطلاعاتی و رشته اتصال را مشخص کنید .دکمه next  را بزنید و به مرحله بعد بروید صفحه ای برای شما نمایش داده می شود که مجموعه دستورات DDl را برای ایجاد این جدولها در بانک اطلاعاتی را بصورت فایلی ذخیره می کند .

Entity_Framework15 - Entity Framework 4  part 1 - متا

دکمه Finish  را کلیک کنید تا فایل مورد نظر شما ایجاد شود که حاوی کدهایی برای ایجاد بانک اطلاعاتی است .یک فایلی با فرمت .sql  خواهد بود ، همانطور که در شکل بالا می بینید .اکنون برای اجرای اسکریپت بالا در فضای خالی از کد اسکریپت کلیک راست کرده و گزینه Execute Sql  را مطابق شکل زیر انتخاب کنید ، اسکریپت شما در بانک اطلاعاتی مشخص شده ایجاد خواهد شد

Entity_Framework16 - Entity Framework 4  part 1 - متا


نگاهی عمیق تر به Entity Data model

ابتدا از محیط کاری و پنجره های طراحی EDM  صحبت می کنیم . در کار با EDM  4 پنجره از محیط طراحی برای شما بسیار مفید است

1-Designer surface : سطح بصری طراحی می باشد که شما می توانید به کمک آن ساختار و مدل EDM  را ایجاد و یا تغییر دهید.

2-Mapping Detail windows  : پنجره ای برای map  کردن و تغییر در این پنجره شما یک ساختار فیزیکی از عناصر Entity را مشاهده می کنید

3-Toolbox  : جعبه ابزار که برای همه مشخص است و در مقاله قبل با آن بیشتر آشنا شدیم

4-Model Browser Window  : این پنجره ساختاری درختی از مدل مفهومی و منطقی مدل نمایش می دهد .
در شکل زیر این چهار پنجره به تفکیک نمایش داده شده است .


Entity_Framework17 - Entity Framework 4  part 1 - متا

Entities

برای فهم بهتر entity  باید با چند مفهوم آشنا شویم

Entity Type  : نشان دهنده نوع خاصی از داده ها است مثلا داده ای از نوع سطرهای جدول کارمند Emplyee ، در واقع می توان گفت رکوردهای جدول را نشان می دهند..

Entity Set : یک در برگیرنده یا مجموعه ای از Entity  های واحد .بنابر این Entity  ها را می توان بصورت Entity Set  گروه بندی کرد .در هر Entity set  ما می توانیم چند Entity type  داشته باشیم و هر گروه Entity Set نیز می تواند با یک Entity Set دیگر در ارتباط باشد .
فرض کنیدما 3 نوع Entity Type  به نامهای Salesperson ,SalesOrderHeader,SalesOrderDetail  داریم و دو تا Entity Set داریم که به صورت شکل زیر هستند


Entity_Framework18 - Entity Framework 4  part 1 - متا

دراینجا Entity Set  اول شامل دوتا Entity Type  است .

Scalar Properties  : اگر مقاله های قبلی را مطالعه کرده باشید متوجه شدید که هر Entity Type  دارای مجموعه ای از خصوصیات (Properties  ) می باشد که یکی از آنها Scalar Properties  است . اگر بخواهیم آن را به زبان ساده بیان کنیم باید بگویم که این آیتم در واقع خصوصیتهایی را تعریف می کند که مقادیر رایج متغیرها یعنی عدد ، رشته ، کارکتر و تاریخ و غیره را می پذیرد .به تعبیری دیگر همان فیلدها بانک اطلاعاتی هستند که هر کدام دارای نوع هستند اگر شما یک Entity Type  از مثالهای قبل ایجاد کرده باشید کافیست یکی از خصوصیات را انتخاب کنید و به پنجره Properties  دقت کنید


Entity_Framework19 - Entity Framework 4  part 1 - متا


می بینید هر کدام از فیلدها یا همان خصوصیتهای Entity  ما دارای ویژگیهایی است مانند زیر

 Name  : نام خصوصیت مورد نظر را نمایش می دهد که می توان آن را تغییر داد

Nullable : آیا فیلد مشخص شده مقدار Null  را می پذیرید

Setter : همان خاصیت Set  در تعریف خصوصیات کلاسها که ما در اینجا سطح دسترسی آن را تعریف می کنیم

Getter : همان خاصیت Get  در تعریف خصوصیت فیلد کلاسها که ما در اینجا سطح دسترسی آن را تعریف می کنیم

StoredGenerationPattern : معادل Auto –generated  در بانکهای اطلاعاتی یعنی مقادیر یک فیلد اتوماتیک اضافه می شوند

Type : نوع فید

Default Value: مقدار پیش فرض

Complex Types

حتما تا کنون با ساختارها (structure) سروکار داشته اید . ما ساختاری  تعریف می کردیم که می توانست مجموعه ای از داده های متفاوت را با هم در یک متغیر ساختاری جمع آوری می کرد . مفهموم Complex Types  چیزی شبیه به همان مغیرهای ساختاری است . در وواقع یک متغیر مرکب است .مثلا اگر بخواهید آدرس فردی را با ساختار تلفن – آدرس منزل_ایمیل _شماره موبایل ، ذخیره کنید .باید از یک متغیر مرکب یا همان complex  استفاده کرد . اکنون با مثال نحوه تعریف آن را نشان می دهم .ما در بخش قبل گفتیم که یک Entity  می تواند شامل خصوصیاتی باشد که از نوع متغیرهای متعارف باشد مثلا عددی یا کارکتری و غیره ، اما اگر بخواهیم خصوصیتی پیچیده تر و با نوع مرکب داشته باشیم ، مثلا یک خصوصیت داشته باشیم که از نوع ساختاری یا یک نوع مرکب و پیچیده ، چکار بایدکرد . جواب همان Complex Types

شما باید ابتدا یک آیتم و متغیر از نوع Complex Types  تعریف کنید و پس از آن در Entity  مورد نظرتان یک خصوصیت از نوع Complex Property تعریف کنید که این خصوصیت مرکب بعدا از نوع Complex Types خواهد بود.

فرض کنید پروژه ای که قبلا ایجاد کرده ایم را باز کرده ایم ، به پنجره Model Browser  دقت کنید
Entity_Framework20 - Entity Framework 4  part 1 - متا

همانور که می بینید گزینه Complex Types  را مشاهده می کنید . برای ایجاد آن بر روی Complex Types  کلیک راست کرده و گزینه Create Complex Types را انتخاب کنید .یک آیتم Complex Types  ایجاد می شودنام آن را AddressInfo  می نامیم اکنون بر روی همان آیتم مجددا کلیک راست کنید و گزینه Add  را انتخاب کنید و سپس گزینه Scalar Property را انتخاب کنید .لیستی از انواع برای شما باز می شود


Entity_Framework21 - Entity Framework 4  part 1 - متا

فرض کنید می خواهیم آیتمی تعریف کنیم که آدرس را بصورت شماره تلفن و آدرس ذخیره کند پس 2 قسمت داریم یکی Phone , و دیگری Address است فرض کنیم اولی از نوع عددی و دومی کارکتری پس اولی را بصورت زیر تعریف کنید

Add  ----à Scalar Property --à Int32

و سپس نام آن را phone  وارد کنید برای دومی هم به همان ترتیب با این تفاوت که نوع آن String  است .

Entity_Framework22 - Entity Framework 4  part 1 - متا


اکنون ما یک آیتم complex Types  تعریف کردیم اما ما مشخص نکردیم که این آیتم باید به کدام Entity  ارتباط داشته باشد برای اینکار بر روی یکی از Entity  های مدل فرضا Entity2  کلیک راست کرده و گزینه Complex Types  را انتخاب می کنیم مانند شکل زیر خواهد شد

Entity_Framework23 - Entity Framework 4  part 1 - متا

اکنون به پنجره

propertie مرتبط به این Complexproperty بروید و از قسمت Type  مربوطه آیتم AddressInfo را انتخاب کنید در حقیقت ما اینجا خصوصیتی تعریف کردیم از نوع AddressInfo  که در واقع یک نوع مرکب جدید تعریف شده توسط کاربر است .

وقتی شما به مدل نگاه می کنید تنها نمایی جزیی از کار را می بینید ، اکنون شما باید بدانید که در پشت پرده مدل شما چه فایلها و کدهایی ایجاد شده است .برای این کار مطابق مثالهای قبل یک پروژه جدید ایجاد کنید و از بانک اطلاعاتی Northwind  یک مدل از جداول categories  و  products ایجاد می کنیم . مطابق شکل زیر

Entity_Framework25 - Entity Framework 4  part 1 - متا

خوب اگر خاطرتان باشد گفتیم که هر مدل که ایجاد می کنیم محتویات آن در یک فایل .edmx  است .ما اکنون می خواهیم ساختار دقیقتر و جزیی تری از این فایل را بدانیم برای اینکار بر روی فایل مدل خود فرضا فایل Model1.edmx  کلیک راست کنید و از گزینه های باز شده گزینه open with  را انتخاب کنید از پنجره زیر گزینه xml Editor  را انتخاب کنید .

Entity_Framework26 - Entity Framework 4  part 1 - متا

دکمه ok  را کلیک کنید . فایلی در ساختار XML  برای شما باز می شود.

Entity_Framework27 - Entity Framework 4  part 1 - متا

در واقع ساختار بالا یک ساختار فراداده metadata از فایل model1.edmx است . فایل و ساختار Metadata  معمولا یک ساختار معنایی ، تشریح کننده محتوا ، محل نگه داری ، خصوصیات فیزیکی ، نوع و شکل منبع است . در واقع ما اینجا هم چنین فایلی برای مدل داریم .فایل .edmx دارای سه بخش Metadata  است .

1-Store schema definition language  مخفف آن ssdl  : معمولا ما به آن مدل فیزیکی و ذخیره ای از داده های مدل می گوییم

2-Conceptual Schema definition language   مخفف آن csdl  : معمولا ما با آن مدل مفهومی یا ادراکی مدل می گوییم

3-Mapping specification language   مخفف آن MSL  : معمولا مدل Map از ساختار مدل و داده ها است .

اکنون اگر به تصویر بالا دقت کنید تمام عناصر ذکر شده را به ترتیب دربخشهای SSDl content  و CSDL content  و Mapping content  مشاهده می کنید .

 

1-SSDL    مدل فیزیکی :ما  در اینجا ساختار ذخیره ای و فیزیکی مدل را با فرمت Xml  داریم . اگر به این فرمت دقت کنید مهمترین عناصر آن به ترتیب زیر هستند :

1-1-Schema  : اگر دقت کنید در سطر اول ظاهر می شود از فیلدهای اجباری است که مهمترین عنصر آن NameSpace  است که اجباری است و باید باشد و باید به فضای نام Entity  ما اشاره کند .در واقع مفهومی شبیه به همان مفهوم فضای نام Name Space  در کلاسها و کد نویسی دارد.


2-1- EntityType : نشان دهنده اشیا Object  موجود در مدل است . نام هرEntity Type  در آن فضای نام باید منحصر به فرد باشد و تکرار مجاز نیست هر کدام از EntityType  ها نشان دهنده مدلی از جدول در بانک اطلاعاتی است مثلا در این مثال products  نمایش دهنده مجموعه رکوردهای جدول product  از بانک اطلاعاتی است .


property-3-1 : هر کدام از EntitType  های مدل ما یکسری عناصر دارند ، که این عناصر دارای نام و نوع و طول و مقدار کارکتر یا محدوه عددی و مقیاس و تهی پذیر یا خیر می باشد .در واقع اگر بخواهیم تشبیه کنیم ، می توان گفت ما در اینجا با فیلدهای جدول سرو کار داریم .

4-1 - key :

1-4-1  PropertyRef : ما در اینجا فیلدی را مشخص می کنیم که کلید اصلی جدول داده ها یا مدل داده های ما است مثلا اگر در بانک اطلاعاتی Product  فیلد اصلی ProductId  باشد پس مقدار این آیتم هم productId خواهد بود.


Association  -6-1

-1-6-1    End : همانطور که می دانید بانک اطلاعاتی از ارتباطات بین عناصر برخوردار هستند ارتباطاتی مانند ارتباط یک به یک و یک به چند یا چند به چند و.. در آمزشهای قبلی ذکر کردم که عناصر مدل می توانند مانند بانکهای اطلاعاتی باهم ارتباط داشته باشند که از طریق این خصوصیت امکان پذیر است

Associationset  نشان دهنده ارتباط و نام و مشخصات آن و گره End   نشان دهنده راسهای ارتباط بین عناصر است.

referential constraint   : این قسمت در واقع نشان دهنده قیدهای ارتباط است ما می دانیم در هر ارتباط بین عناصر 2 جدول یک کلید اصلی است و کلید دیگر باید کلید خارجی یا ثانویه باشد .


                  principal : نشان دهنده منشا و کلید اصلی ارتباط

                 Dependent      : نشان دهنده کلید ثانویه یک ارتباط بین عناصر است .

 

8-1- EntityContainer     : به طور کلی در این قسمت ما دو گره Entityset  و Associatioset را داریم .و درواقع ساختاری کلی از منبع داده را برای ما نمایش می دهد


9-1-   EntitySet   : گروهی از EntityType  های منبع داده را نمایش می دهد.


10-1- Associationset  : مجموعه و ساختار کلی ارتباطات را نمایش می دهد

 

بطور کلی بحث در مورد ساختار SSDL بسیار مفصل است اما در این مطلب مختصری برای آشنایی   بیان کردم .

2-CSDL مدل مفهومی یا ادراکی : ما در اینجا می توانیم ادعا کنیم که با یک الگو و ساختاری نمونه برای مدل داده ها سرو کار داریم . ساختار آن بسیار شبیه به ساختار SSDl  است . البته با تغییراتی بیشتر .

تفاوت این دو قسمت بالا زمانی نمایان می شود که ما حالت مدل را انتخاب کنیم ، یعنی اگر ما از بانک اطلاعاتی، مدل را بسازیم در این حالت ما SSDL  را خواهیم داشت . اما اگر یادتان باشد ما حالتی داشتیم که اول مدل را طراحی می کردیم و سپس بر اساس مدل بانک اطلاعاتی را می ساختیم در این حالت ما  فقط محتویات مفهومی و معنایی مدل  CSDL  را خواهیم داشت.


3-MSL  : در واقع حلقه وصل بین SSDL  و CSDL است . به شکل زیر دقت کنید :


Entity_Framework28 - Entity Framework 4  part 1 - متا


    در شکل بالا می بینید که چگونه عمل Map  انجام می شود . مهمترین عناصر  MSL  به شرح زیر است :

1-Mapping  : عنصر ریشه ای می باشد که در برگیرنده تمام آیتمهای MSL  است .

2-EntiyContainerMapping  : در این قسمت نام هر Entitycontainer  موجود در دو بخش SSDL  و CSDL  را شامل می شود در واقع ظرفی ایجاد می کند برای ایجاد ارتباط بین   SSDL EntityContainer  و بخش

CSDL Entitycontainer

3-EntitySetMapping : این بخش نیز ارتباطی ایجاد می کند بین هر بخش Entityset موجود در SSDL  و CSDl

4-   ٍEntityTypeMapping  :  این بخش نیز ارتباطی ایجاد می کند بین EntityType های دو بخش SSDL و CSDL

بحث در مورد SSDL  و CSDL  و MSL  بسیار مفصل است ، تا اینجا بحث را در این بخش خاتمه می دهم اما در این مقاله فهمیدیم که وقتی یک مدل از بانک اطلاعاتی ایجاد می کنیم در پشت صحنه ایجاد یک فایل Metadata  چگونه اطلاعات ساختار بندی می شود.

Normal 0 false false false EN-US X-NONE FA MicrosoftInternetExplorer4

اکنون نوبت به نوشتن دستورات است و چگونه با داده های بوسیله مدلها در تعامل باشیم ، بازیابی اطلاعات و حذف و تغییر چگونه خواهد بود . ما تا قبل از آمدن مفاهیم ORM  ها و غیره برای انجام کویری برروی داده ها مستقیما با بانکهای اطلاعاتی سرو کار داشتیم در واقع با دستورات T-SQL  سرو کار داشتیم . اما از اینجا به بعد با دستورات LINQ to Entities  و Entity Sql  سروکار خواهیم داشت .این دستورات با EDM  سروکار دارند . اما لازم دانستم قبل از وارد شدن به این مبحث ابتدا در مورد Logical Query Processing  در  sql server کمی صحبت کنم . حتما تا حالا با انواع و اقسام دستورات پرس و جو با بانکهای اطلاعاتی سرو کار داشته اید ، آیا تا حالا از خود پرسیده اید که فرایند و تسلسل این دستورات چگونه است ، کلا در یک عبارت پرس و جو از چند جدول بانک اطلاعاتی ابتدا کدام دستور اجرا می شود .

ما می دانیم که هر عبارت پرس و جو دارای عناصر زیر است .

From ,select,where,on , join,group by , having ,order by,top , 
است . ترتیب اجرای آنها در یک عبارت جستجو بصورت زیر است .

 

نقل قول

1. FROM
2. ON
3. OUTER
4. WHERE
5. GROUP BY
6. CUBE | ROLLUP
7. HAVING
8. SELECT
9. DISTINCT
10 ORDER BY
11. TOP


1-
عبارت from  در واقع اول از همه اجرا می شود به این دلیل که ابتدا باید جدوال منبع جستجوی ما مشخص شوند

2-
عبارت on ,outer ,…. در واقع عبارتهای الحاقی ، همان عبارتهایی که بعد از مشخص شدن جدولهای مورد نظر ، حالا باید مشخص شود که ترکیب این جدولهای چگونه است .

 

3-
از میان ترکیب چند جدول حالا بر اساس عبارت where  مجموعه ای از داده ها انتخاب می شوند

 

4-
در ادامه از میان این داده های انتخاب شده ، داده ها بر اساس فیلدهایی گروه بندی می شوند.

 

5-
وباز در ادامه از میان گروهها ممکن است مجموعه ای از عناصر بر اساس دستور having  فی_لتر شوند

 

6-select 
اینجا با این دستور در واقع داده ها برای نمایش و نتیجه برگزیده می شوند .

 

7-
از میان داده ها برگزیده شده ممکن است سورت خاصی مد نظر شما باشد که با استفاده از order by  عمل سورت برای شما انجام می شود

 

  Querying with the Entity Framework
قبل از آنکه در مورد کویری با مدل بحث کنیم بد نیست بدانیم که کویری های ما با کلاس مدل سروکار دارند لذا نیم نگاهی به کلاس سازنده مدل می اندازیم.

اگر کلاس مدل را باز کنید متوجه دو بخش عمده Context , entity  می شوید . در واقع کلاس اصلی سازنده مدل ما از کلاس objectcontext  ارث بری می کند .در شکل زیر نموداری کلی از کلاس را نشان می دهد .
Entity_Framework30 - Entity Framework 4  part 1 - متا

به طور خلاصه می توان گفت که هر کلاس مدل دارای ساختار مشابه شکل فوق است . ما وقتی مدل خود را ایجاد می کنیم ، کلاس تشکیل شده بصورت عمده دارای دو object  است . 1- شی object context  و 2- شی Entity Type

ما در اجرای کویری عمدتا با این دو شی سر و کار خواهیم داشت .

 

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

 

Entity Type  : قسمت مهم دیگر است که از کلاس Entityobject  مشتق می شوند .از مهمترین کارهایی که این کلاس برای ما ارایه می دهد تعریف عناصر موجودیت و خصوصیتهای آنها و ارتباطات بین عناصر موجودیت و ...

 

اکنون که بطور خلاصه با دو کلاس آشنا شدیم ، چگونه می توانیم کویری برای مدل ایجاد کنیم ، کلا برای نوشتن کویری بر یک مدل ما سه نوع روش کویری داریم .

 

1-LINQ to Entities  : در این روش ما از دستورات زبان LINQ  استفاده می کنیم .

 

2-Entity Sql  : یک زبانی که با اشیا سرو کار دارد و به شما امکان می دهد که کویری خود را ب روی اشیا بدون نیاز به زبان  Tsql  انجام دهید .

 

3-Querying with Method  : متدهایی از شی objectquery  هستند که به شما اجازه می دهند با ترکیبی از عبارتهای لامبدا  Lambdas   کویری خود را بنویسید .

شاید این پرسش برای خیلی ها مطرح شود که چرا برای نوشتن کوئری باید از چند روش استفاده کرد و کلا چرا این روشها معرفی شده است و تفاوت بین این روشها چیست ؟

من ترجیح دادم قبل از وارد شدن به مبحث کوئری کمی در مورد ساختار و نحوه انجام کوئریها صحبت کنم .

با توجه به پیشینه زبان  لازم دانستم مفاهیمی دیگر را نیز بیان کنم .

شاید این پرسش برای خیلی ها مطرح شود که چرا برای نوشتن کوئری باید از چند روش استفاده کرد و کلا چرا این روشها معرفی شده است و تفاوت بین این روشها چیست ؟

من ترجیح دادم قبل از وارد شدن به مبحث کوئری کمی در مورد ساختار و نحوه انجام کوئریها صحبت کنم .

با توجه به پیشینه زبان LINQ  برای مایرکروسافت ;  می توان نتیجه گرفت که هدف اصلی از ارایه LINQ TO Entities   در واقع توسعه ای برای این زبان است و امکانی برای برنامه نویسانی است که با این زبان سر و کار دارند.علاوه بر این استفاده از LINQ  مقادیر برگشتی کوئری بصورت جدولها و ردیف و ستون نیست .بلکه بصورت object  است .محدودیت زبان LINQ  در این است که فقط در زبانهای سی شارپ و vb.net  پشتیبانی می شود و برای سایر زبانهای دات نت قابل استفاده نیست . علاوه بر این به هنگام کامپایل باید به زبان متدی Query method  تبدیل شود تا برای CLR  قابل فهم باشد .

زبان Entity SQL  : این زبان بسیار شبیه به زبان T_SQL  است . با این تفاوت که این زبان می تواند با کلاسها و اشیا سروکار داشته باشد و به تبع آن از وراثت و ارتباطات بین کلاسها به خوبی پشتیبانی می کند. . در واقع ما به کمک Entity SQL  می توانیم همه به صورت شی گرا و هم بصورت داده ها رکوردی سطر و ستون ;  با بانک اطلاعاتی سروکار داشته باشیم .و این مهمترین دلیل برتری Entity Sql  بر زبان LINQ to Entity است .

 

در نهایت زبان Query Method  لایه ای پایینتر است ، چرا که فقط می تواند با با زبانهای بالا ترکیب شود و کویریهای بسیار قدرتمندتری را تولید کند . از مهمترین خصوصیت این روش خلاصه نویسی و استفاده از عبارتهای لامبدا است . .

اکنون به شکل زیر دقت کنید تا متوجه شوید که   وLINQ to Entities Entity Sql  چگونه با داده ها تعامل می کنند
IC314061 - Entity Framework 4  part 1 - متا

همانطور که در شکل بالا می بینید . اگر بخواهیم با داده ها بصورت شی یا object  سر و کار داشته باشیم . با استفاده از زبان LINQ to Entities   و Entity SQL  ما می توانیم با شی object service  در تعامل باشیم . در این تعامل ما کاملا با کلاسها از جمله کلاس objectcontext  و کلاسها داده  data class  سر و کار داریم .

حال اگر به شکل بالا دقت کنید می بینید که  LINQ to Entites برای انجام کویری چه فرایندی را طی می کند . علاوه بر این   نمی تواند مستقیما به لایه EntityClientLINQ to Entites  دسترسی داشته باشد در حالی که  Entity SQL می تواند مستقیما با لایه  EntityClient دسترسی داشته باشید و داده ها را بصورت رکوردی و ستون و ردیف داشته باشد


EntityClient  چیست ؟ همانطور که در شکل بالا و در شکل پایین می بینید ، این لایه بسیار شبیه به لایه های Sqlclient ,OracleClient ,…. است. این لایه مدیریت رشته اتصال و command ها و غیره را کنترل و پردازش می کند .سرو کار کوئری در این لایه با داده ها بصورت شی و Object  نیست بلکه بصورت داده های ستونی و ردیفی است ، علاوه بر این این لایه با EDM  در ارتباط مستقیم است .

ArticleImage - Entity Framework 4  part 1 - متا

امیدوارم توانسته باشم فرق و ساختار کویریها را به خوبی بیان کنم

Entity SQL  part 1
در بخش قبل در مورد LINQ to Entities  صحبت کردیم . همچنین در بخشهای قبلی اگر خاطرتان باشد گفتم که Entity SQL  هم می تواند از طریق ObjectService  و هم مستقیما می تواند از طریق EntityClient  با بانک اطلاعاتی ارتباط برقرار کند . علاوه بر اینها ذکر کردیم که به دستورات T_SQL  شبیه است . بنابراین باید مطالب را در 3 بخش توضیح دهم . بخش اول در مورد شباهتها و تفاوتهای Entity SQL  و بخش دوم در مورد تعامل Entity SQL  با ObjectService    و بخش سوم در مورد تعامل Entity SQL  با EntityClient  خواهد بود .

 

بخش اول : تفاوتهای Entity SQL  با دستورات T-SQL

 

1-وراثت و ارتباطات

همانطور که می دانید در مدل ما به دلیل وجود کلاسها .، از مفهوم وراثت و ارتباط بین عناصر پشتیبانی می کند در حالی که T-SQL  فقط از ارتباطات بین عناصر پشتیبانی می کند . علاوه بر این Entity SQL  در واقع با مدل مفهومی Conceptual entity  سرو کار دارد .

 

2-Collections

Entity SQL  همانند یک کلکسیونی از اشیا رفتار می کند در واقع داده های حاصل از آن براحتی در مجموعه Collection  ها قابل جایگزاری است .

 

3-پشتیبانی از عبارتها

شما در دستورات T-SQl  فقط با جدولها و ستونهای آن جدولها سروکار دارید در حالی که در Entity SQL علاوه بر اینها شما می توانید در کویری خود عبارتهای مختلفی را نیز داشته باشید .

 

4-select Value

این عبارت زمانی به کار می رود که ما بخواهیم آیتم مشخصی را بصورت آبجکت یا کلکسیون و یا یک مقدار اسکالر داشته باشیم . به شکل زیر دقت کنید .


Entity_Framework37 - Entity Framework 4  part 1 - متا

در شکل بالا یک ساختاری کلی از عبارت select value  در Entity SQL  نمایش می دهد . همانطور که می بینید . در دستور بالا ما یک Object  بر می گردانیم یعنی حاصل کویری ما یک Object  است .با همین فرم بالا ما می توانیم یک ابجکت و یا مقدار مشخص یا کلکسیونی از داده ها داشته باشیم .به شکل زیر دقت کنید .


Entity_Framework38 - Entity Framework 4  part 1 - متا

در کویری اول ما یک شی و در کویری دوم ما یک فیلد و در نهایت در کویری سوم ما یک ستونی بر می گردانیم که از نوع ارجاع Refrence  می باشد . مبحث این مطلب بعدها توضیح خواهم داد .

خوب اکنون متوجه شدیم که عبارتهای کویری در Entity SQL  تا چه حد می توانند انعطاف پذیر باشند .

اما اگر بخواهیم چندین آیتم انتخاب کنیم دیگر نیازی به عبارت value  نخواهیم داشت بلکه ذکر نام آن فیلدها کافی است .


5-Referencing Columns 

در دستورات زبان T-SQl  به هنگام انتخاب ستونهای جدول نیازی نیست که قبل از نام هر ستون ، نام جدول ذکر شود اما در Entity SQL  این امر ضروری است شما باید در مقابل نام هر ستون ، ابتدا نام مرجع آن را هم ذکر کنید .دستور پایین اولی یک دستور T-SQl  است و دومی یک دستور Entity SQL  است .

 

select a from T

 

select t.a as A from T as t

 

6- عدم پشتیبانی از *

حتما می دانید که در زبان T-SQL هر گاه بخواهیم تمام ستونهای یک جدول را انتخاب کنیم از عبارت * استفاده می کردیم اما در Entity SQL  این کار امکان پذیر نیست .

 

7-عدم پشتیبانی از دستورات DDL  و DML  در Entity SQL

 

8-پشتیانی از گروه بندی مستعار

خیلی وقتها شما نیاز دارید برای کویری خود یک گروه بندی تعریف کنید . در زبان T-SQL  شما باید نام گروهها را به صراحت و مطابق نام ستونها تعریف کنید در حالی که در زبان Entity SQL  شما می توانید از عبارتها مستعار هم استفاده کنید . در عبارت زیر یک دستور T-SQL  است .

select b + c, count(*), sum(a)

from T

group by b + c

 

حال عبارت بالا در Entity SQl مشاهده کنید که چگونه برای گروه نام مستعار انتخاب کرده است .

 

select k1, count(t.a), sum(t.a)

from T as t

group by t.b + t.c as k1

 

 

 

 

Normal 0 false false false EN-US X-NONE FA MicrosoftInternetExplorer4
ارسال شده توسط احمد محمدی | 6 02, 2016 | بازدید‌ها (517)

راهكارهای افزایش سرعت بانك‌ اطلاعاتی SQL Server



چکیده :


اگر شما تجربه كار در محیط‌های متوسط (مثلاً با یكصد كاربر) یا بزرگ‌ را نیز داشته باشید، قطعاً با مسائل و مشكلات مربوط به كاهش سرعت ناشی از افزایش تعداد كاربران یا حجم پردازشی آن‌ها مواجه شده‌اید. در این مقاله با استناد به منابع مایكروسافتی، راهكارهایی را برای بهبود سرعت و كارایی سیستم در بانك‌های اطلاعاتی با تعداد كاربر و حجم پردازش زیاد مورد بررسی قرار می دهیم. طبق بررسی‌هایی كه كارشناسان مایكروسافت انجام داده‌اند، كارایی یك سیستم بانك اطلاعاتی به پنج عامل مختلف بستگی دارد كه به ترتیب اهمیت عبارتند از: برنامه نوشته شده، پایگاه داده موردنظر، سخت‌افزار سرور یا كلاینت، تنظیمات و نسخه مورد استفاده
SQL Server و سیستم‌عامل ویندوز. همان‌طور كه حتماً می‌بینید، ساختار پایگاه داده، برای كارایی سیستم، در رتبه دوم اهمیت قرار‌دارد. بنابراین ایجاب می‌كند كه در زمان تحلیل و طراحی سیستم، به‌صورت ویژه‌ به بانك اطلاعاتی در‌حال ساخت توجه شود و رابطه بین این بانك و برنامه‌های كاربردی و همچنین رابطه بین اجزای مختلف درون بانك، به بهترین شكل ممكن طراحی و پیاده‌سازی شود.

https://i-msdn.sec.s-msft.com/dynimg/IC42074.gif

توسعه 
به‌طور كلی برای افزایش سرعت یك بانك اطلاعاتی می‌توان به دو روش اقدام كرد. در واقع پنج عامل مورد اشاره در بالا‌، به دو دسته طولی و عرضی تقسیم‌بندی می‌شوند. در توسعه طولی كه در اصطلاح انگلیسی به Scalp up نیز شناخته می‌شود، مدیر سیستم با صرف هزینه‌، به ارتقای سخت‌افزار (مثل پردازنده‌ها یا هارددیسك‌ها) یا به‌طوركلی ایجاد شبكه‌ای سریع‌تر اقدام می‌نماید یا مثلاً سیستم‌عامل خود را به نسخه‌ای جدیدتر و پایدارتر ارتقا می‌دهد. اما در روش عرضی (Scale out) تقریباً با حفظ همان سخت‌افزار و ساختار شبكه، به بهینه‌سازی روابط موجود میان عناصر دخیل در سرعت مثل برنامه‌های كاربردی، بانك اطلاعاتی و سرور اقدام می‌كند.

توسعه طولی (Scale up) 
هدف این مقاله پرداختن به توسعه عرضی برای بهره‌برداری بهینه از امكانات موجود است. اما قبل از آن، جادارد به‌صورت خلا‌صه و فهرست‌وار به توسعه طولی و راه‌حل‌های آن نیز پرداخته شود تا زمینه برای بررسی‌های بیشتر در آینده فراهم گردد.

راه‌حل یكم: افزایش حافظه مورد استفاده
SQL Server ، برای اطلاع از چگونگی انجام‌دادن این كار، به سایت پشتیبانی مایكروسافت رجوع كنید نشانی(http://support.microsoft.com) و در آنجا عبارت AWE SQLServer را جستجو كنید تا مقالاتی كه در این زمینه وجود دارد، در دسترس شما قرار گیرد.

یا استفاده از SQL Server 2014 که جهت توضیحات بیشتر به نشانی
http://fumblog.um.ac.ir/fumindex.php?op=ViewArticle&articleId=12041&blogId=569


راه‌حل دوم: ارتقای سیستم‌عامل ویندوز سرور 2008 به بالا كه در فرایند
caching، سیستم‌عاملی پایدارتر و هوشمندتر قلمداد می‌شود.

راه‌حل سوم: استفاده از پردازنده‌های قویتر در سرور. این پردازنده‌ها به دلیل ویژگی
hyper threading، می‌توانند سرعت پردازش اطلاعات در سمت سرور را به دو برابر افزایش دهند.

راه‌حل چهارم: ارتقاء هارددیسك‌ سرور
 راه‌حل پنجم: جداسازی محل ذخیره فایل‌های داده‌ای بانك اطلاعاتی (
mdf) و فایل‌های لاگ (ldf) برروی دو هارددیسك مختلف یا دو دیسك مختلف از یك RAID

با جداسازی این فایل‌ها از یكدیگر، عمل ایجاد لاگ، وقفه‌ای در خواندن و نوشتن اطلاعات بر روی هارددیسكی كه حاوی فایل‌های داده‌ای
mdf است، ایجاد نمی‌كند.

راه‌حل ششم: راه‌حل آخر و در واقع مشكل‌ترین راه، تقسیم بانك اطلاعاتی (در صورت لزوم) به دو یا چند  بانك جدا از هم و بر روی دو سرور مختلف است.  


توسعه عرضی (Scale out) 

نام خانوادگی

نام

شماره تامین اجتماعی بیمه شده

شماره سریال بیمه شده

ب

الف

ایندكس خوشه‌ای یا خاصیت منحصر به فرد

كلید اولیه ایندكس غیرخوشه‌ای

راه‌های موجود در توسعه عرضی در واقع سریع‌ترین راه‌حل‌های افزایش سرعت در بانك‌های اطلاعاتی را تشكیل می‌دهند. برخی از این راه‌ها فقط با یك بار استفاده، اثر دایمی خود را روی سیستم به جا می‌گذارند. اما برخی دیگر باید به عنوان یك الگوی دوره‌ای در مراحل زمانی مناسب ازسوی مدیر سیستم اجرا شود. این راه‌ها در واقع جزئی از دستورالعمل‌های نگهداری و پشتیبانی سیستم محسوب می‌شوند. در ادامه  به بررسی آن‌ها می‌پردازیم:

1 - از ساخت جداولی كه فاقد كلید اولیه (
Primary key) باشند، خودداری كنید. كلید اولیه علاوه بر جلوگیری از  ورود اشتباه اطلاعات از سوی كاربر، به دلیل داشتن خاصیت منحصر به‌فرد بودن (Unique) به سریع‌تر پیدا‌شدن ركورد موردنظر از همان جدول كمك شایانی می‌كند. تا آنجا كه برای سیستم امكان دارد برای كلید اولیه از فیلدهای عددی استفاده كنید.

استفاده از فیلدهای رشته‌ای (
string) مثلchar یاvarchar به‌عنوان كلید اولیه، كمی كندتر از فیلدهای عددی است. از انتخاب فیلدهای رشته‌ای با طول زیاد و یا فیلدهایی مثل Memo ،Text و Picture به عنوان كلید اولیه نیز اجتناب كنید.

2 - تمام كلیدهای خارجی (
Foreign key) قابل تعریف در بانك را تعریف كنید. وجود كلیدهای خارجی نیز علاوه بر جلوگیری از اشتباه كاربر در واردكردن یا حذف اطلاعات، موجب می‌شود هنگام لینك شدن (join) جداول مادر و فرزند از طریق كلیدهای خارجی، سیستم سرعت بیشتری را در انجام دستورات Select شما از خود نشان دهند.

3 - همان‌طور كه می‌دانید ایندكس‌ها در دو نوع خوشه‌ای (
cluster) و غیرخوشه‌ای (Non cluster) قابل ساخت هستند. ایندكس‌ها باعث افزایش سرعت خواندن اطلاعات به‌وسیله دستور Select می‌شوند.
ما تعریف بی‌رویه آن‌ها در سیستم نیز باعث كاهش سرعت اجرای دستورات فرایندی مثل
Insert ،Update و Delete  می‌شود. بنابراین سعی كنید ایندكس‌های ضروری را در سیستم تعریف كنید. اما در این راه دست و دلبازی بی‌مورد از خود نشان ندهید. به عنوان مثال، فرض كنید در یك شعبه اداره تأمین اجتماعی، جدولی ویژه تعریف بیمه‌شدگان به شكل زیر وجود دارد.  

مبلغ

تاریخ

شماره سریال

1

جزء دوم كلید اولیه

جزء اول كلید اولیه

1

 

كلید خارجی از جدول قبل

1

جزئی از ایندكس خوشه ای

جزئی از ایندكس خوشه ای

جدولی نیز برای نگهداری وجه حق بیمه از بیمه‌شدگان نیز تعریف شده است.

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

نكته مهم دیگر این است كه لا‌زم است تمام كلیدهای اولیه جداول ایندكس دارای باشند (خوشه‌ای یا غیرخوشه‌ای) نكته دیگر در زمان ساخت ایندكس‌ها فاكتور پرشدن (
Fill Factor) آن‌ها است. این فاكتور در واقع بیانگر میزان فضای میانی است كه باید برای ركوردهایی كه در آینده درج یا حذف می‌شوند، خالی نگه داشته شود. بنابراین اگر احساس می‌كنید جدول شما به‌طور مداوم مورد عملیات حذف و درج (Insert،‌Delete) قرار می‌گیرد، این فاكتور را پایین (مثلاً 30 درصد) انتخاب كنید. اما اگر صرفاً عملیات درج بر روی یك جدول انجام می‌گیرد و میزان حذف اطلاعات از آن بسیار كم است، می‌توانید این میزان را به ارقام بالاتر مثلاً 90 درصد افزایش دهید. زیرا این نوع جداول نیازی به داشتن فضای خالی میانی برای ركوردهایی كه در آینده جانشین ركوردهای حذف شده می‌شوند، ندارد.

این مسئله برای ایندكس‌هایی كه برروی دیدها (
Indexed Views) ساخته می‌شوند نیز صادق است. به‌طوركلی گذاشتن ایندكس برروی دیدها به افزایش سرعت آن‌ها كمك می‌كند. در این حالت، كلیه مطالب مذكور از جمله سیاست استفاده از ایندكس‌های خوشه‌ای و غیرخوشه‌ای و همچنینFill Factor در جداول، در مورد دیدها نیز عیناً باید رعایت گردد.

4 - در هنگام نوشتن دستورات
Select یا در هنگام ساختن دیدها، از استفاده بی‌مورد از پارامترهای پردازش مثلDistinct و LIKE order by و لینك‌های خارجی (Outer join) اجتناب كنید. در صورت استفاده از این پارامترها، مطمئن باشید كه گذاشتن آن‌ها كاملاً ضروری است و چاره دیگری ندارید.

5 - از واگذاری پردازش‌های ریاضی یا آماری سنگین و مداوم به سرور بانك اطلاعاتی بپرهیزید. مثلا‌ً به دستور زیر نگاهی بیندازید.

SELECT( a*( b+c ;)) +( d* E+F))  %G/H From ... WHERE ...


به‌جای این‌كار، می‌توانید ابتدا با استفاده از یك
Select معمولی مثل Select a ,b ,c ,d ,E ,F ,G ,h  فیلدهای موردنظر را در حافظه كلاینت لود كنید و سپس عملیات ریاضی مذكور را در همان جا انجام دهید. با این كار پردازشی كه سرور باید مثلاً برای 50 كلاینت در عرض چند دقیقه انجام دهد، بین آن 50 كلاینت تقسیم می‌شود و در واقع هر كلاینت فقط سهم پردازشی مربوط به خود را انجام می‌دهد.

6 - گاهی عمل اجتماع بین دو
Select  توسط دستور Union به شدت بر عملكرد و سرعت سیستم اثر منفی می‌گذارد. بنابراین در صورت امكان به جای استفاده از روش مذكور، از روش‌های دیگری كه هدفتان را برآورده نماید، استفاده كنید.

7 - سعی نمایید فیلدهایی كه از نظر مقدار و ارزش با یكدیگر مقایسه می‌شوند، از یك جنس (
type) باشند. در غیر این‌صورت سیستم‌مجبور می‌شود به طور ضمنی، عمل تبدیل داده را انجام دهد كه كمی برایش وقت‌گیر است. به مثال زیر توجه كنید و فرض بگیرید فیلد customer ID در جدول customers از جنس nchar تعریف شده است. 

Declare@custID char (5)
Set @ CustID =" FDLKO"
Select * From Customers where customerID=@custID


8 - تاحد ممكن از به كار بردن توابع (چه پیش ساخته توسط
SQL Server و چه ساخته شده توسط كاربر) در قسمت WHERE یا order by اجتناب كنید. مثال زیر نمونه‌ای از این مورد است:

Select * Form orders Where DateAdd (Day, 15, orderdata) = "2005/23/07"


9 - در زمان نوشتن تریگر (
trigger) بر روی جداول یك بانك اطلاعاتی، از نوشتن تعداد زیادی دستورالعمل در آن‌ها خودداری كنید. به عبارت دیگر تریگرها را تا حد امكان كوتاه كنید و دستورالعمل‌ پیاد‌ه‌سازی آن‌ها را كم نمایید.
10 - در زمان ساخت كرسر (
cursor) درون توابع، روال‌ها و تریگرها از پارامترهای Forward only یا read only و همچنین local استفاده كنید تا SQL Server با دانستن این نكته كه شما قصد تغییر داده‌ها در كرسر موردنظر را ندارید، تغییر یافتنی بودن آن‌ها را درنظر نگیرد و آن را برای شما سریع‌تر بسازد.

11 - در صورتی كه تكه‌ای از برنامه شما به ساخت یك جدول موقت (
temporary table) نیاز دارد، این كار باید با ظرافت خاصی صورت بگیرد. اصولا SQL Server برای اجتناب برنامه‌نویسان از ساخت جداول موقت، از یك نوع داده(Data type) خاص به نام Table پشتیبانی می‌كند كه مزیت استفاده از آن این است كه به‌جای هارددیسك، در حافظه رم قرارگرفته است و در نتیجه نسبت به جداول موقت سرعت بیشتری دارد.

اما به یاد داشته باشید كه استفاده بی‌رویه از این نوع داده، حافظه زیادی را صرف می‌كند كه می‌تواند باعث كاهش كارایی سیستم شود. بنابراین اگر احساس می‌كنید تعداد جداول موقت، ركوردهای آن‌ها و زمان استفاده از آن‌ها كم است، از این نوع داده استفاده كنید. در غیر این‌صورت، راه‌حل جدول موقت را انتخاب كنید.
 
12-  قفل‌گذاری بر روی ركوردهایی كه در حال خواندن، درج شدن، حذف شدن یا تغییر كردن هستند، همیشه از مباحث مهم بانك‌های اطلاعاتی بوده‌است. همان‌طور‌كه می‌دانید یك فرایند (
Transaction) شامل یك یا چند دستورالعمل SQL است كه یا باید همگی به صورت موفقیت‌آمیز اجرا شوند (committed) یا در صورت ایجاد خطا در زمان اجراشدن یكی، اجرای بقیه نیز منتفی شود (Rollbacked).
 

ایندكس گذاری برروی دیده ها(Indexed Views) یكی از بهترین راههای فوری جهت افزایش سرعت جستجو بر روی دیدهااست. در حالت عادی گزینه Manage Indexes بر روی دیدها قابل انتخاب نیست مگر آنكه اولا كلیه جداول یا دیدهای موجود در آن، خود دارای ایندكس باشد و دوم اینكه كلیه دیدهای موجود در آن و هم خود دید مورد نظر با دستور زیر ساخته شده باشند.
Create View....Whit Schema Binding AS.......
 

فرایند به دو صورت قابل پیاده‌سازی است. این كار یا با استفاده از دستورات Begin trans و Committrans انجام می‌شود كه به آن حالت صریح (Explicit) می‌گویند یا به صورت ضمنی (Implicit) صورت می‌گیرد كه در آن اثری از دو دستور مذكور دیده نمی‌شود و هر دستور SQL یك فرایند مجزا به حساب می‌آید. در هر دو روش ركوردهایی كه تحت‌تأثیر دامنه فرایند قرار می‌گیرند، توسط سیستم قفل می‌گردند و برای دیگر كاربران نیز غیرقابل استفاده می‌شوند و در نتیجه باعث كاهش سرعت كار آن‌ها به دلیل ایجاد انتظار برای آزاد شدن ركوردها می‌شود.
 
بنابراین برای رسیدن به حداكثر كارایی سیستم، باید از ایجاد قفل‌های بی‌مورد بر روی ركوردهای جداول بانك اطلاعاتی جلوگیری كرد. این كار با استفاده از دستور
SET Transaction Isolation Level Read Uncommitted برای فرایندهای صریح (قبل از شروع فرایند، یعنی قبل از دستور (begin Trans  و یا استفاده از دستور WITH NOLOCK  برای فرایندهای ضمنی (پس از قسمت From هر دستور SQL) قابل انجام است. در مورد مسئله فرایندها و انواع قفل‌گذاری مطالب خواندنی زیادی در سایت مایكروسافت وجود دارد كه درصورت تمایل می‌توانید به آن‌ها نیز مراجعه كنید.

13 - روال‌های ذخیره شده (
stored Procedures) پس از هر اجرا، به ازای هر دستورالعملی كه اجرا می‌كنند،  جهت اطلاع برنامه فراخوان (كلاینت) از موفقیت‌آمیز بودن اجرای آن دستور SQL، پیغامی را به سمت آن برنامه می‌فرستند. این مسئله باعث افزایش ترافیك شبكه در اثر فرستادن مداوم پیغام ازSP به سمت كاربر می‌شود. با تایپ دستور زیر در ابتدای یكSP، می‌توانید آن را از انجام این كار منع كنید:
SET NOCOUNT ON

نتیجه‌گیری‌
مطالب فوق تنها قسمتی از راهكارهای قابل انجام برای رسیدن به‌سرعت و بازدهی مناسب در بانك‌های اطلا‌عاتی مبتنی بر
SQL Server است. در ضمن‌ باید این نكته را هم درنظر داشت كه اصولا‌ً در سیستم‌های بزرگ اطلا‌عاتی تحت شبكه، توپولوژی و نوع اجزای موجود در شبكه از اهمیت بسیار زیادی در تعیین سطح كارایی یك بانك اطلا‌عاتی برخورداراست. گاهی حتی در حالی‌كه بهترین طراحی و پیكربندی SQL Server برای یك بانك اطلا‌عاتی انجام شده، یك اشتباه كوچك در سطح شبكه می‌تواند تمام زحمات را بر ‌باد دهد یا مثلا‌ً یك سهل‌انگاری در نوشتن روال‌های ذخیره شده یا تریگرها می‌تواند سیستم را به‌یك لوپ (Loop) پردازشی بی‌نهایت ببرد و باعث افت شدید سرعت اجرای برنامه‌ها شود. بنابراین در این‌گونه سیستم‌ها، استفاده بجا و مناسب از منابع سیستم و شبكه و دقت در طراحی و پیاده‌سازی جداول، دیدها، روال‌های ذخیره‌شده و تریگرها بسیار مهم  و حیاتی است.

 

ارسال شده توسط احمد محمدی | 6 02, 2016 | بازدید‌ها (347)

بررسی تکنولوژي In-Memory OLTP در SQL Server 2014


بدون شک، مهم‌ترين ويژگي‌هاي جديد در SQL Server 2014 موتور جديد پردازش تراکنش برخط در-حافظه است. در سال 2007 با توجه به اينکه سرعت پردازش CPU ها به حداکثر خود رسيده‌بود، مايکروسافت بر روي افزايش کارايي از طريق بهينه‌سازي حافظه، کار مي‌کرد. اين روند با تکنولوژي VertiPaq شروع شد که در ابتدا مايکروسافت آن را با انتشار SQL Server 2008 تحت عنوان Power Pivot معرفي نمود.Power Pivot از تکنولوژي حافظه فشرده استفاده مي‌کرد و اجازه مي‌داد محيط مايکروسافت اکسل، تحليلهاي هوش تجاري (BI) را بر روي مجموعه‌داده‌هايي با بيش از چندين ميليون سطر انجام دهد. اين فن‌آوري در-حافظه بعدها به فن‌آوري ايندکس ستوني ارتقاء پيدا کرد که مايکروسافت آن را با SQL Server 2012 منتشر نمود.برخلاف فن‌آوري اصلي VertiPaq که در محيط اکسل معرفي شد، شاخص ستوتي که در محيط SQL Server 2012 قرار داده شده بود، يک موتور پردازش جداگانه‌اي بود که به منظور پياده‌سازي بهتر انبار داده‌ها بر روي SQL Server پياده‌سازي شده بود.

ايندکس ستوني از طريق فشرده‌سازي داده‌هاي ستوني، جابجا نمودن آنها به داخل حافظه، و اجراي پرس و جوهاي ستوني بر روي داده‌ها، کارايي انبار داده‌ها را بهبود بخشيده بود. البته قابليت ايندکس ستوني به صورت فقط خواندني قابل استفاده بود و در عمليات حذف، اضافه و به‌روزرساني قابل استفاده نبود و بنابراين کاربرد اين تکنولوژي به عنوان يک موتور فقط بر روي انبار داده‌ها قرار گرفته بود.در SQL Server 2014 مايکروسافت نسخه تکامل‌يافته تکنولوژي در-حافظه را ارائه داد و موتور کاملاً جديد پردازش تراکنش برخط در-حافظه را ارائه داد که به طراحان اجازه مي‌دهد جداول را به طور کامل انتخاب و براي کارايي بيشتر و دسترسي به داده‌ها با زمان تاخير کمتر، در حافظه قرار دهند.در اينجا معماري اوليه موتور پردازش تراکنش برخط در-حافظه مورد بررسي قرار خواهد گرفت. بعلاوه نيازها و محدوديتهاي استفاده از موتور پردازش تراکنش برخط در-حافظه بيان خواهد شد.


ديد کلي معماري In Memory Database

 

موتور پردازش تراکنش برخط در-حافظه SQL Server 2014 ، در ابتدا با نام Hekaton معرفي شد. اين کلمه معادل واژه يوناني 100 است و دليل اين نامگذاري اين بود که هدف مايکروسافت از اين تکنولوژي بهبود کارايي به ميزان 100 برابر (100x) بود. مايکروسافت اين موتور پردازش پرس و جو را از ابتدا با استفاده از يک مدل بدون قفل طراحي کرد. هيچ قفل داخلي براي حفظ تماميت داده تراکنشي استفاده نشده است.طراحي بدون قفل، يکي از نقاط کليدي است که موتور پردازش تراکنش برخط در-حافظه را از جداول pinning با DBCC PINTABLE يا از putting-database روي SSD ها متمايز مي‌کند.DBCC PINTABLE يک جدول را در buffer pool SQL Server نگهداري مي‌کند، اما در اين روش موتور رابطه‌اي يکساني را براي نگهداري خود جدول و قفلهاي آن استفاده مي‌کند، بنابراين اين روش مقياس‌پذيري موجود در موتور OLTP در حافظه را ارائه نمي‌دهد. همين مسئله براي SSD ها هم صدق مي‌کند، اين روش هم مي‌تواند I/O سريعتري را فراهم کند، اما استفاده از موتور رابطه‌اي يکسان استفاده مي‌کند.در مقابل، موتور OLTP در-حافظه از يک مکانيسم جديد بهينه براي کنترل همزمان چند نسخه‌ با الگوريتمهايي که براي داده مقيم در حافظه بهينه‌شده‌اند، استفاده مي‌کند. وقتيکه يک سطر در يک بافر مشترک اصلاح مي‌شود، موتور OLTP در-حافظه يک نسخه جديد کامل از آن سطر و برچسب زماني آن را ايجاد مي‌کند.

اين فرآيند بسيار سريع است به دليل اينکه اين مسئله به طور کامل در حافظه انجام مي‌شود. موتور سپس هر سطر به‌روز شده‌اي را قبل از انجام آن تحليل و اعتبار سنجي مي‌کند. اين طراحي، سريعتر و مقياس‌پذيرتر از مکانيسم قفل‌گذاري سنتي است که در موتور بانک اطلاعاتي رابطه‌اي SQL Server استفاده مي‌شد، به دليل اينکه هيچ قفل و وضعيت انتظاري وجود ندارد که جلوي اجراي سريع پردازنده را بگيرد.از آنجا که اين پردازش بهينه تعداد زيادي نسخه‌هاي مختلف از يک سطر را ايجاد مي‌کند، تعدادي سطر دورانداختي در حافظه باقي مي‌گذارد. براي رسيدگي به نسخه‌هاي سطرهاي دورانداختني، مايکروسافت يک فرآيند جديد جمع‌آوري زباله با قفل آزاد را به عنوان قسمتي از موتور OLTP در-حافظه، پياده‌سازي نموده است. فرآيند جمع‌آوري زباله به صورت تناوبي همه سطرهاي غيرضروري را پاک مي‌کند.در رابطه با طراحي قفل آزاد جديد، مايکروسافت يک فرآيند کامپايل رويه‌هاي ذخيره‌شده را معرفي مي‌کد که کد T-SQL را تفسير نموده و آن را به کد Win64 پايه کامپايل مي‌کند. هدف از آن کاهش تعداد دستورالعمل‌هاي CPU است که بايد براي پردازش هر پرس و جو اجرا گردد. يک مسير کد کوتاهتر معادل است با اجراي کد سريعتر. ترکيب موتور پردازش پرس و جوي جديد و رويه‌هاي ذخيره شده کامپايل شده، فاکتورهاي اصلي هستند که باعث ايجاد کارايي بهترمي‌شوند


همانطور که در شکل مي‌بينيد، موتور OLTP بر-خط به صورت جداگانه کار نمي‌کند، بلکه با موتور SQL Server رابطه‌اي در تعامل است و به شما اجازه مي‌دهد تا اشياء حافظه بهينه‌سازي شده و اشياء بانک اطلاعاتي استاندارد را در يک پرس و جوها استفاده کنيد.


جداول، رويه‌هاي ذخيره شده و ايندکس‌ها

 

براي پياده‌سازي موتور OLTP در حافظه، مايکروسافت روش رسيدگي به جداول، رويه‌هاي ذخيره‌شده و ايندکسها رااصلاح نموده است. جداول به طور کامل در حافظ کپي مي‌شوند و با نوشته شدن وقايع تراکنش بر روي ديسک، پايا مي‌شوند. موتور قفل آزاد، تراکنشها را براي جداول مقيم در حافظه پردازش مي‌کند. کارايي رويه‌هاي ذخيره‌شده بوسيله کامپايل شدن رويه‌هاي ذخيره شده در کد اصلي، بهبود يافته است. به طور معمول، وقتي رويه‌هاي ذخيره شده T-SQL تفسير مي‌شوند، سرباري را به فرآيند اجرا تحميل مي‌کنند. وقتي که داده مقيم در حافظه است، اين مي‌تواند مانعي براي کارايي باشد. کامپايل شدن رويه‌هاي ذخيره شده در کد Win64 اصلي، باعث اجراي مستقيم آن مي‌شود، بنابراين به بيشترين حد کارايي و کمترين زمان اجرا دست‌خواهيم يافت.همانطور که انتظار داريد، ايندکسها براي جداول مقيم در حافظه، متفاوت مي‌باشد. آنها ساختار B-tree را که براي ايندکسهاي بر روي ديسک استفاده مي‌شود، استفاده نمي‌کنند. SQL Server 20014 يک hash index جديد يا ايندکس بهينه‌شده در حافظه بدون کلاستر را براي جداول بهينه‌سازي شده در حافظه استفاده مي‌کند. Hash index در عمليات جستجو بسيار موثر است، اما براي مقادير دامنه بهترين عملکرد را ندارد. ايندکسهاي بهينه شده در حافظه بدون کلاستر در بازيابي مقادير دامنه بسيار مناسب عمل مي‌کند. آنها بازيابي سطوح جداول با همان نظمي که در هنگام ايجاد ايندکس مشخص شده بود را به خوبي پشتيباني مي‌کنند.

هر جدول بهينه شده در حافظه بايد حداقل يک ايندکس داشته باشد. ايندکسهاي بهينه شده در حافظه بايد به عنوان يک جزئي از دستور Create Table استفاده گردد. شما نمي‌توانيد دستور Create Index را براي ايجاد يک ايندکس براي يک جدول بهينه شده در حافظه، بعد از اينکه جدول ايجاد شد، استفاده کنيد. ساختارهاي ايندکس بر روي ديسک وجود ندارد، و عمليات ايندکس در وقايع تراکنش ثبت نمي‌شود. در اصل همه ايندکس‌هاي بهينه‌شده در حافظه، همه ستونها و ايندکسها را پوشش مي‌دهند و شامل مي‌شوند. نکته مهمي که بايد مورد توجه قرار گيرد، اين است که جداول بهينه شده در حافظه در بيشترين حالت فقط هشت ايندکس را مي‌توانند پشتيباني کنند.


نيازمنديهای In Memory Database

 

از نظر سخت‌افزاري براي پياده‌سازي موتور OLTP در-حافظه، يک سرور 64 بيتي مورد نياز است که دستورات cmpxchg16b را پشتيباني کند. همه پردازنده‌هاي مدرن 64 بيتي اين دستورات را پشتيباني مي‌کنند. فقط زماني ممکن است با مشکل مواجه شويد که موتور OLTP در-حافظه را در ماشين مجازي 64 بيتي پياده‌سازي نماييد که يک پردازنده مجازي قديمي‌تر را استفاده نمايد. اگر با اين مورد مواجه شديد، شما نياز به به‌روز رساني پردازنده مجازي VM را داريد. به‌علاوه SQL Server به حافظه کافي براي ذخيره همه جداول و ايندکسهاي بهينه شده در حافظه، نياز دارد. براي اينکه مطمئين شويد که حافظه کافي داريد، مايکروسافت پيشنهاد مي‌دهد که دو برابر سايز روي ديسک جداول و ايندکس‌هاي بهينه شده در حافظه، حافظه فراهم نماييد. بيشترين حجم پيشنهادي توصيه شده براي جداول بهينه شده در حافظه GB 256 مي‌باشد.موتور OLTP در حافظه بر روي Windows Server 2012 R2 ، Windows Server 2012 و Windows Server 2008 R2 SP2 پشتيباني مي‌شود. البته همانطور که بيان شد، سيستم عامل 64 بيتي مورد نياز است. به‌علاوه بايد از نسخه Enterprise ، Developer يا Evaluation SQL Server 20014 استفاده شود. SQL Server 2014 نسخه Standard ، موتور OLTP در-حافظه را پشتيباني نمي‌کند.وقتيکه يک نسخه از SQL Server 2014 با پشتيباني از OLTP در-حافظه نصب مي‌کنيد، مطمئن شويد که Database Engine Services to install support for In-Memory OLTP engine را انتخاب نموده‌ايد. توجه داشته باشيد که موتور OLTP در-حافظه از چندين فن‌آوري دسترسي‌پذيري بالا شامل failover clustering ، Alwayson Availability Groups و log shipping پشتيباني مي‌کند.


محدوديتهای In Memory Database

 

همانطور که شما هم انتظار داريد، طبيعت حافظه فشرده به گونه‌اي است که محدوديتهايي را براي استفاده از موتور OLTP در-حافظه ايجااد مي‌کند. اولين مورد اينکه همه انواع داده تعريف شده در SQL Server 2014 پشتيباني نمي‌گردد. انواع داده‌هاي زير در جداول بهينه شده در حافظه پشتيباني نمي‌شود :

  • Datetimeoffset
  • Geography
  • Hierarchyid
  • Image
  • Ntext
  • Sql_variant
  • Text
  • (Varchar(max
  • Xml
  • (User data types (UDTs


به‌علاوه، بعضي از ويژگيهاي بانک اطلاعاتي پشتيباني نمي‌گردد. در زير، بعضي از مهمترين محدوديتهاي بانک اطلاعاتي و جداول آمده است:

  • مانيتورينگ بانک اطلاعاتي پشتيباني نمي‌شود.
  • گزينه Auto-Closed براي بانک اطلاعاتي پشتيباني نمي‌شود.
  • تصاوير لحظه‌اي بانک اطلاعاتي پشتيباني نمي‌شود.
  • DBCC CHECKDB و DBCC CHECKTABLE کار نمي‌کند.
  • ستونهاي محاسبه شده ، پشتيباني نمي‌شد.
  • Trigger ها پشتيباني نمي‌شود.
  • قيدهاي Foreign Key، Check و Uniqe پشتيباني نمي‌شود.
  • ستونهاي IDENTITY پشتيباني نمي‌شود.
  • ذخيره‌سازي FILESTREAM پشتيباني نمي‌شود.
  • RowGuidcol پشتيباني نمي‌شود.
  • Clusterd Index ها پشتيباني نمي‌شود.
  • جداول بهينه شده در حافظه، در بيشترين حالت، هشت ايندکس را پشتيباني مي‌کند.
  • ColumnStore Index ها پشتيباني نمي‌شود.
  • Alter Table پشتيباني نمي‌شود. جداول OLTP در-حافظه بايد حذف شده و دوباره ايجاد شوند.
  • فشرده‌سازي داده پشتيباني نمي‌شود.
  • مجموعه‌هاي Multiple Active Result پشتيباني نمي‌شود.
  • (Change Data Capter(CDC پشتيباني نمي‌شود.


شما نبايد به صورت دستي هيچ فايل Checkpoint اي را در اشياء بانک اطلاعاتي OLTP در-حافظه حذف کنيد. SQL Server همه فايلهاي Checkpoint بلااستفاده را وقتي که از بانک اطلاعاتي يا از log ، پشتيبان تهيه مي‌کنيد، حذف مي‌کند. اگر شما فايل پشتيبان تهيه نکنيد، فضاي در دسترس روي ديسک کاهش خواهد يافت.اگر از OLTP بر-خط استفاده مي‌کنيد، مايکروسافت به شما پيشنهاد مي‌دهدد که يکي از policy هاي ويندوز سرور با عنوان Instance File Initialization را فعال نماييد. براي فعال کردن آن، شما بايد به حساب کاربري SQL Server Service حق دسترسي SE_MANAGE_VOLUM_NAME را اضافه نماييد. توجه داشته باشيد که تنها راه حذف کردن فايل گروه بهينه شده در حافظه، از يک بانک اطلاعاتي، حذف کردن بانک اطلاعاتي مي‌باشد.


موارد استفاده از پردازش تراکنش برخط در-حافظه

 

در چه مواقعي استفاده از OLTP در-حافظه کارايي بانک اطلاعاتي شما را افزايش خواهد داد. مايکروسافت يک ابزار جديدي براي تحليل، مهاجرت و گزارش‌گيري(AMR) ارائه داده است. همانگونه که نام اين ابزار نشان مي‌دهد، ابزار AMR مي‌تواند در تشخيص اينکه جابه‌جا کردن کدام جداول و رويه‌هاي ذخيره شده به حافظه، مفيد است، کمک نمايد.به‌علاوه، اين ابزار مي‌تواند در جابه‌جا کردن اشياء بانک اطلاعاتي به داخل حافظه کمک کند. ابزار AMR وقتيکه ابزار مديريت را در هنگام نصب SQL Server 2014 انتخاب مي‌کنيد، نصب مي‌شود. شما مي‌توانيد به ابزار AMR از طريق SQL Server Management Studio (SSMS) دسترسي پيدا کنيد.

 

Normal 0 false false false false EN-US X-NONE FA MicrosoftInternetExplorer4

درباره من

  • 9163858398
  • جديدترين مقالات مرتبط با مدیریت فناوری اطلاعات (برنامه ريزي منابع سازماني ERP و..)
    احمد محمدی(کارشناس ارشد مدیریت - فناوری اطلاعات و مهندس نرم افزار)
    مشاور نظام مهندسی رایانه ای خراسان رضوی
    ahmad.mohammadi.a@gmail.com

آخرين مطالب بروز شده