بایگانی دسته‌ها: پایگاه داده

جایگاه NoSQL در دنیای امروز توسعه نرم افزار

قبل تر در دو مقاله  به معرفی NoSQL و نمونه هایی از آن که در .NET قابل استفاده هستند، پرداخته بودم. در این مقاله که از مجله ی ماهانه ی سایت Dr Dobbs برای شما ترجمه کردم، جایگاه این نوع از  دیتابیس را از منظر دیگه ای بررسی می کنم.

بابک فخریلو

یک از موضوعات بحث برانگیزی که حول NoSQL در بین توسعه دهندگان و معماران سیستم در جریان است، این است که بهترین جا برای استفاده از این نوع دیتابیس ها، کجاست. باور به بعضی فناوری ها، زمان زیادی را می طلبد. به عقیده برخی از توسعه دهندگان، NoSQL برای برنامه های کاربردی خاصی می تواند مفید باشد و دیتابیس های از نوع RDBMS همچنان چیرگی گذشته خود را حفظ خواهند کرد. چنین بحث هایی مانع از تغییرات بنیادین در چگونگی توسعه ی برنامه های کاربردی می شود. باهم چند ویژگی اساسی NoSQL را بررسی می کنیم تا ببینم تاثیر آن بر شکل دهی معماری برنامه های کاربردی در آینده و حتی حال حاضر چگونه خواهد بود.

بسط پذیری و Big Data

دیگر بحث بر سر داده هایی با چندین گیگابایت نیست، حتی برنامه های با اندازه کوچک هم با ترابایت یا پتابایت سر و کار دارند، که بیشتر این حجم از داده به طور مدوام در حال تغییر و رشد کردن است. هرچه بار داده ای بیشتر می شود، سازمان های IT محور به دنبال راهی خواهند بود که به سرعت سیستم خود را، بدون پرداخت صدهاهزار دلار برای خرید یک سرور، بسط و توسعه دهند.

دیتابیس های NoSQL برای چنین نیازی هایی راه حل ارائه می  دهند، چرا که طوری طراحی شده اند تا اصلاحا scale out شوند و نه scale up. این دیتایس ها با عملکرد خودکار روی چندین سرور ارزان قیمت یا روی بستر cloud، امکان افزایش و کاهش ظرفیت را با هزینه ای مقرون به صرفه فراهم می کنند. شما بدون نیاز به پرداخت هزینه های بالا، سیستمی با عملکرد فوق العاده خواهید داشت.

از انجایی که محدودیت بسط پذیری این دیتابیس ها کم است، در مدیریت حجم داده های زیاد، که نیاز برنامه های امروز است، بسیار بهتر عمل می کند.

تغییر معماری سیستم

با ظهور سیستم های Cloud، شکل گیری سیستم های نرم افزاری هم به شکل قابل توجهی دچار تحول شده است، و این تغییر با بروز انواع جدیدی از فناوری ها و سرورها، ادامه خواهد داشت. یک instance از دیتابیس می تواند خیلی ساده  در هزاران node پخش شود، که این node ها هم در سرتاسر دنیا پراکنده شده اند، و به میلیون ها کاربر در سرتاسر دنیا به طور همزمان سرویس می دهند.

NoSQL به طور ذاتی با معماری سیستم های جدید تطابق دارد، یعنی طوری طراحی شده که در node های بیشماری بسط پیدا می کند و با اضافه و کم شدن یک node، همچنان به عملکرد خود ادامه می دهد. این شکل از  طراحی، هزینه های بسط سیستم و نیز مدیریت سیستم (system administration) را کاهش می دهد. خیلی از دیتابیس های NoSQL حتی قابلیت location-aware را نیز دارند، یعنی بسته به محل جغرافیایی کاربر، سرعت ارائه داده ها می تواند افزایش پیدا کند (مانند انچه در Content Delivery Network ها وجود دارد).

سادگی استفاده

از آنجایی که این دیتابیس ها، برخلاف RDBMS، schema ی ثابت ندارند، کار کردن با آنها ساده است. شما می توانید خیلی سریع برنامه ی خود را اماده کنید، بدون این که نگران باشید به خاطر تغییر در سیستم نرم افزاری تان، مجبور به سپری کردن زمان برای تغییر schema باشید. به اضافه این که خاصیت document-oriented بودن این دیتابیس ها، نیاز به تبدیل پرس و جوهای SQL به کد object-oriented (انچه که ORM ها انجام می دهند)، و برعکس را، برطرف می کند. خوب با این توضیحات آیا NoSQL جایگزین RDBMS خواهد شد؟ پاسخ این است که نه به این زودی ها. باید چشم انتظار آینده بود…آینده ای نزدیک البته

برگرفته از:

Why NoSQL Is Here To Stay

بیشتر بخوانید:

NoSQL چیست؟

RavenDb

RavenDB

و نوشتن را مرضی است. اصلا این صفحه ی RavenDB چند روزه تو مرورگرم بازه، هی میخوام بشینم در موردش بنویسم، الان یه دفعه دیدمش دیگه دلم نیومد ننویسم. اصلا هم حوصله ندارما، یعنی دپسرده هم هستم.

در هر صورت، تو مطلب قبلی به دیتابیس های NoSQL اشاره کردم و گفتم که این نوع دیتابیس ها، چه تفاوت هایی با دیتابیس های از نوع SQL Server یا Oracle دارن. در انتها هم یکی از دیتابیس های از نوع NoSQL معرفی کردم به اسم RavenDB که برای محیط دات نت طراحی شده. تو این مطلب، به طور مفصل تری به این دیتابیس می پردازم.

بابک فخریلو

RavenDB یک دیتابیس از نوع Doc-Oriented، تراکنشی (transactional) و متن باز است که برای محیط دات نت طراحی شده، و مدل داده ای را ارائه می کند که برای نیاز های سیستم های که در دنیای واقعیت می بینیم، طراحی شده است. RavenDB به شما این امکان را می  دهد تا برنامه های کاربردی با عملکرد بالا و latency پایین را سریع و کارا طراحی کنید.

همان طور که جز خواص دیتابیس های نوع Doc-Oriented است، داده ها در RavenDB بدون schema و در قالب JSON ذخیره می شوند، و می توان خیلی ساده با استفاده از Linq، یا توابع RESTful (روشی برای دسترسی و دستکاری داده ها که در معماری های SOA استفاده می شود. بیشتر کاربرد آن در وب سرویس ها می باشد.) روی آنها Query دلخواه را به راحتی اجرا کرد. RavenDB در عملکرد درونی خود از Index ها استفاده می کند، که این ایندکس ها یا بر اساس استفاده شما به طور خوکار ایجاد می شوند، یا این که طور صریح و بر اساس نیاز شما ایجاد می گردند.

RavenDB پروژه هایی با گستره ی پروژه های تحت وب را مد نظر دارد، و ویژگی های چون replication و sharding (من به شخصه این ویژگی خیلی برام جالبه) را در خود دارد.

چطور باید از RavenDB استفاده کرد؟

RavenDB یک Server و یک Client دارد. Server مسئول مدیریت فضای ذخیره سازی داده و query ها، و client یک مصرف کننده است که با سرور در تعامل است. راه های به کار بستن RavenDB در پروژه تان محدود به یک روش نیست:

  • به صورت یک سرویس در سیستمی مجهز به سیستم عامل Windows
  • یکپارچه شده با IIS
  • Embedded در برنامه ی شما

وقتی که RavenDB Server را توانستید اجرا کنید و به کارش بندازید، اتصال به آن با استفاده از یک client برای دریافت و ذخیره سازی داده ها خیلی ساده است. جالب اینجاست که RavenDB با کلاس هایی که قبلا در سیستم خود تعریف کرده اید سازگار است، یعنی به راحتی با استفاده از همان کلاس هایی که برای Persistence استفاده می کردید، در اینجا هم می توانید استفاده کنید:

همان طور که متوجه شده اید، RavenDB از الگوی  Unit Of Work استفاده می کند، از این رو تمامی تغییرات که قبلا از فراخوانی session.SaveChnages() در نظر گرفته شده اند، در یک تراکنش رخ می دهند.

Read the rest of this entry

NoSQL چیست؟

شاید شما هم این روزها این واژه رو خیلی جا ها تو اینترنت دیده باشید، به ویژه اگه مثل من اهل Twitter باشید یا تو سایت های مربوط به Developer ها زیاد گشت بزنید. اون طوری که من برداشت کردم، این نوع از دیتابیس ها، شکل جدیدی از دیتابیس ها هستند که برای نیاز های نرم افزاری حال حاضر طراحی شدند، و تفاوت های چشم گیری هم با دیتابیس هایی مثل   SQL Sever، Oracle و MySQL دارند. در ادامه توضیح دقیق تر رو از زبان یکی از متخصصین این نوع دیتابیس ها می خوانیم.

بابک فخریلو

آن طور که Martin Fowler، در وبلاگش می گوید، تعریف رسمی برای NoSQL وجود ندارد، اما در جمع بندی های که صورت گرفته می توان خصوصیات دیتابیس هایی از این دست را این گونه تعریف کرد:

  • عدم استفاده از  مدل رابطه ای  و زبان SQL
  • متن باز بودن
  • ویژه ی استفاده در cluster های بزرگ
  • مبتنی بر نیاز های وب در قرن حاضر
  • بدون Schema، که در نتیجه می توان به هر رکورد دلخواهی، هر فیلدی را اضافه کرد

البته باید اشاره کرد که این ویژگی ها در همه ی دیتابیس های که در این رده قرار می گیرند، مشترک نیستند و تعریف ها هم قطعی نیستند.

اما دانستن تعریف اولیه از NoSQL بدون در نظر گرفتن دیتابیس های Document-oriented ، خالی از لطف خواهد بود. آنچه که Wikipedia در مورد Document Oriented Database می گوید، این چنین است:

یک دیتابیس Doc-Oriented، برنامه ی کامپیوتری است که برای ذخیره سازی، بازیابی و مدیریت اطلاعات document-oriented یا به عبارتی نیمه ساختار یافته، به کار می رود. دیتابیس هایی از این دست از جمله ی دسته بندی های اصلی دیتابیس هایی هستند که NoSQL نام دارند. برخلاف دیتابیس های رابطه ای و مفهوم «رابطه» در آنها، این سیستم ها حول مفهوم انتزاهی به نام «Document» طراحی شده اند.

اما “Document” در اینجا دقیقا به چه چیزی اشاره دارد؟

مفهوم اساسی در یک دیتابیس از نوع  Doc-Oriented، یک Document است. در حالی که هر پیاده سازی از این مفهوم با دیگری متفاوت است، اما در کل، همه ی آنها فرض را بر این گذاشت اند که document ها، داده ها در فرمتی استاندارد کپسوله و کدگذاری می کنند. کدگذاری های مورد استفاده می تواند، XML، YAML، JSON و BSON باشد، یا فرمت های باینری مانند PDF و فرمت های Microsoft Office (Word, Excel…) باشد.

Document ها در چنین دیتابیسی، شباهتی به رکورد ها یا سطر ها در دیتابیس های رابطه ای دارند، اما با این تفاوت که انعطاف بیشتری دارند. نیازی نیست که حتما مقید به یک schema استاندارد باشند یا بخش بندی ها و کلید های مشابهی داشته باشند. به مثال زیر نگاه کنید:

و حالا Document دیگری می تواند به شکل زیر باشد:

 
می بینید که هر دو document، شباهت هایی دارند و البته تفاوت هایی هم دارند. برخلاف دیتابیس های رابطه ای، که در آن هر رکورد باید فیلد های مشترکی با بقیه رکوردها داشته باشد و فیلد های استفاده نشده حتما باید مقدار خالی به خود بگیرند، در مدل دیتابیس های doc-oriented، فیلد خالی وجود ندارد. در این سیستم، به راحتی می توان داده های جدید را اضافه کرد، بدون نگرانی از وجود فیلد های خالی و یا نبود فیلدهای یکسان برای رکوردها.

انواع مختلفی از دیتابیس های Doc-Oriented یا به عبارتی دیتابیس هایی که در گروه NoSQL قرار می گیرند وجود دارد، که از جمله ی آنها می توان به MongoDb و RavenDB اشاره کرد.

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

منابع:

http://en.wikipedia.org/wiki/Document-oriented_database

http://martinfowler.com/bliki/NosqlDefinition.html

NHibernate 2.x Beginner’s Guide

کار کردن با پایگاه داده با استفاده از فناوری هایی که مایکروسافت در Visual Studio و زبان های مرتبط با آن (به ویژه #C) معرفی کرده است، نسبت به گذشته بسیار آسان تر شده. فناوری مانند Linq و entity framework از جمله راه های سریع و آسان برای دسترسی به داده های ذخیره شده در Database هستند. این بار قصد معرفی ابزاری را داریم که متن باز بوده و با اتصال به Visual Studio کار اتصال و بازیابی داده ها از Database را برای شما آسان می کند. این ابزار در شاخه ابزار های ORM قرار دارد، که شما را از طراحی کردن لایه های داده (Data Access Layers) فارغ می سازند. در زیر بیشتر خواهید خواند.

فراخوانی سریع از پایگاه داده برای استفادهی اشیای .NET ، دسترسی موثر به داده های در پروژه ها، استقلال از پایگاه داده، وابسته نبودن به فناوری خاص، عدم نیاز به سپری کردن زمان برای توسعه ی لایه های دسترسی به داده و بسیاری کارهای دیگر، امکاناتی است که NHibernate برای شما فراهم می سازد.

NHibernate یک ORM (object-relational mapper ) متن باز، یا به طور ساده، راهی برای دسترسی به داده های ذخیره شده در پایگاه داده و مرتبط کردن آنها با اشیای .NET است. غالبا زمان زیادی برای طراحی مجدد پایگاه داده جهت بهبود دسترسی به داده و مکانیسم طی می شود. این کتاب با در اختیار قرار دادن همه ی اطلاعات لازم درباره ی بهره وری و بهنیه سازی NHibernate ، سبب می شود تا زمان کمتری را در پروژه ها صرف کنید.

اگر از نوشتن رویه های ذخیره شده(stored procedures ) یا بهره گیری از دستورات SQL خسته شده اید، حتما این کتاب را مطالعه کنید.

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

ته نوشت:
رسما بیچاره شدم تا لینک دانلود رو پیدا کنم، به سلامتی همه سایت های آپلود هم رفتن قاطی باقالی های و مورد لطف قرار گرفتن(دسترسی امکان پذیر نمی باشد).

SqLite ADO.NET و #C

بابک فخریلو

چند وقتی بود که با SQLite آشنا شده بودم. مدتی پیش هم کار کردنش رو با .NET تجربه کردم، و دوست داشتم این تجربه روبا دیگران به اشتراک بذارم، خوشبختانه مطلب آموزشی زیر رو تو سایتی دیدم و تصمیم گرفتم که  برای شما ترجمه کنم.

SQLite که به زبان C نوشته شده، موتور پایگاه داده ای درون سازی شده، بی نیاز از سرور، مستقل از سکو(در هر سیستم عاملی قابل اجرا است)، بی نیاز از نصب و تراکنشی است. SQLite نسبتا کوچک است، و حجمی حدود 257 کیلوبایت و یک فایل پایگاه داده ی منفرد دارد.

استفاده از SQLite به جای MS.Access برای برنامه های متوسط و کوچک بهتر است، چرا که مستقل از سکوست و نیازی به نصب برنامه ی Microsoft Office در کامپیوتر کاربر ندارد. و از آنجایی که به هیچ تنظیمی نیاز ندارد، می توانید برنامه را به راحتی در هر جایی استفاده کنید. چقدر راحت. SQLite از تابع سفارشی و trigger هم پشتیبانی می کند. در Ms.Access برای نوشتن تابع سفارشی، باید از محیط VBA استفاده کنید، اما در SQLite، این تابع را به زبان خودتان می نویسید، تا بعدا به طور خودکار به پردازش SQLite مقید شود.

مزیت های SQLite:

1. بی نیاز از نصب

2. بی نیاز از سرور

3. فایل پایگاه داده ای منفرد(یعنی ففقط یک فایل برای پایگاه داده مورد استفاده قرار می گیرد)

4. مستقل از سکو

5. رکورد های با طول متغیر

6.سایز فشرده

7.رایگان

اشکلات SQLite:

  1. در بیشتر موارد اندازه ی پایگاه داده به 2 گیگابایت محدود است
  2. عدم پذیرش کامل SQL92
  3. بسته شدن کل فایل به هنگام نوشتن
  4. نبود مکانیسم caching
  5. مقیاس پذیری کم

در ادامه نحوه ی استفاده از SQLite را با زبان C# به شما نشان خواهم داد. برای دسترسی به SQLite در C#، نیاز به SQLite ADO.NET دارید که می توانید از اینجا یا اینجا دانلود کنید.(هموطنان داخل ایران از لینک دوم استفاده کنید) :

Visual Studio را باز کنید

یک پروژه  Windows Application به زبان C# ایجاد کنید.

فایل های DLL را از sqlite ADO.NET (System.Data.SQLite.dll) وارد پروژه کنید.(Add refrence)

خاصیت “Copy Local” مربوط به System.Data.SQLite.dll را به true تغییر دهید، تا به هنگام کامپایل، کپی شود

سپس پوشه ی جدیدی ایجاد کرده، نام آن را Data بگذارید. این پوشه محل نگهداری فایل پایگاه داده خواهد بود

فایل پایگاه داده را اضافه کرده،و خاصیت  ”Copy To Output Directory” به «Always» تغییر دهید

حالت Design فرم اول (form1) را انتخاب کرده، و یک DataGridView به آن اضافه کنید، ویژگی های آن را طوری تغییر دهید که شبیه شکل زیر شود

روی Form1 کلیک مضاعف کنید تا وارد محیط ویرایشگر کد و رویداد Form1_Load شوید

کد زیر را وارد کنید

private void Form1_Load(object sender, EventArgs e)
{
SQLiteConnection ObjConnection = new SQLiteConnection("Data Source=Data/data.db3;");
SQLiteCommand ObjCommand = new SQLiteCommand("SELECT * FROM PERSON", ObjConnection);
ObjCommand.CommandType = CommandType.Text;
SQLiteDataAdapter ObjDataAdapter = new SQLiteDataAdapter(ObjCommand);
DataSet dataSet = new DataSet();
ObjDataAdapter.Fill(dataSet, "Person");
dataGridView1.DataSource = dataSet.Tables["Person"];
}

فراموش نکنید که کد زیر را حتما به فرم اضافه کنید

using System.Data.SQLite;

با کامپایل کردن و اجرای فایل، شما به پایگاه داده SQLite متصل می شوید. می توانید عملیات درج، بروز رسانی و حذف یا هر نوع پرس و جوی(query) پیچیده را روی پایگاه داده انجام دهید.

برای دانلود کردن این پروژه و فایل پایگاه داده، اینجا کلیک کنید.

منبع:

http://www.ivankristianto.com/software-development/visual-studio-net/howto-use-sqlite-ado-net-with-c/943/