ورود

View Full Version : irdataBase زیربنای بانکهای اطلاعاتی



tdkhakpur
دوشنبه 25 مرداد 1389, 23:10 عصر
سلام به همه دوستان
دیتابیسی که ارسال میشود یکی از بهترین پایگاه داده ایی هست که قادر هست با تمام بانکهای اطلاعاتی از نظر سرعت رقابت داشته باشد دیتابیس حاضر با توجه به بهترین الگوریتم از نظر حجم داده ها و نیز سرعت دسترسی به داده ها طراحی شده و نسخه کنونی برای کاربران و برنامه نویسان دلفی و سی بصورت dll قرار داده میشود.
بسیاری از برنامه نویسان و یا دانشجویان هستند که از بانکهای اطلاعاتی مانند sql و یا mysql استفاده میکنند در صورتی که در بسیاری از موارد لازم به اتصال بصورت string connection ندارند و یا از اینکه داده هایشان توسط هکرها مورد دسترسی قرار بگیرند ترس دارند دیتابیس حاضر هرگونه نفوذ و دسترسی را با مشخص نمودنsecurity میتوانند اعمال کنند.
و یا بسیاری هستد که می خواهند داده هایشان به راحتی قابل حمل باشد و یا داخل یک شبکه lan برای چندین کاربر برنامه نوشته تا در دسترس همه انها قرار بگیرد همه این موارد در داخل irdataBase قرار داده شده است.
این دیتابیس قادر به اجرا شدن بصورت تک کاربره و چند کاربره بر روی شبکه هایnetware navell هم هست.جزئیات و همچنین دمو برای نحوه استفاده از موتور جستجو ضمیمه میشود.
این نسخه برای دلفی و همچنین سی بوده و توابع زیادی بعدا به موتور جستجو(irdblib.dll) اضافه خواهد شد.
برای توضیحات هم و همچنین دمو به این http://barnamenevis.org/forum/showpost.php?p=1070283&postcount=6 تاپیک مراجعه کنید.(تاپیک شماره 6 از این صفحه)
موفق ....

حمیدرضاصادقیان
سه شنبه 26 مرداد 1389, 09:08 صبح
سلام.این دیتابیس با چه زبانی نوشته شده؟ ساختار ایندکس آن به چه صورت هست.؟ ساختار فایلی آن به چه صورت هست؟

tdkhakpur
چهارشنبه 27 مرداد 1389, 13:10 عصر
این دیتابیس با چه زبانی نوشته شده؟

سی


ساختار ایندکس آن به چه صورت هست.؟

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

ساختار فایلی آن به چه صورت هست؟
داده های متغییر.

حمیدرضاصادقیان
چهارشنبه 27 مرداد 1389, 13:35 عصر
سلام.ممنون.
منظور شما از داده های متغیر چیه؟ مثلا Sql داخل فایل دیتا به صورت page کار میکنه.که هر page 8kb است.و خود این ها شامل هدر هستند و به page های مختلف دسترسی دارند و برای ایندکس ها هم page های جداگانه داره که مشخصات اونها را ذخیره میکنه و...
حالا منظور از داده های متغیر چیه؟
ممنون

tdkhakpur
چهارشنبه 27 مرداد 1389, 15:11 عصر
منظور شما از داده های متغیر چیه؟ مثلا Sql داخل فایل دیتا به صورت page کار میکنه.که هر page 8kb است.و خود این ها شامل هدر هستند و به page های مختلف دسترسی دارند و برای ایندکس ها هم page های جداگانه داره که مشخصات اونها را ذخیره میکنه و...
حالا منظور از داده های متغیر چیه؟


درسته و تفاوت این پایگاه داه با sql و یا دیتابیسهای مشابه همین هستد.
داخل چنین دیتابیسها از صفحات برای نگهداری ایندکسها نگهداری میشود و میشه چنین عنوان کرد که از این الگوریتم برای دسترسی سریع استفاده میشود ولی تنها ایرادی که دارد این هست که برای استفاده حتما باید موتور جستجو استارت بشود در حقیقت یک رابط میانی برای کنترل داده ها برای دسترسی به ایندکسهاست.
ولی داخل irDataBase برای اینکه استفاده کننده برای سیستم موتور جستجوی جداگانه نصب نکند و یا از استارت مصون بماند از صفحات بصورت داده های متغییر در فایل استفاده شده است یعنی ایندکس داخل صفحهای بصورت فایل نگهداری میشود.
ولی به غیر از صفحات برای ایندکسها - سایر اگوریتم صفحه بندی داده ها مشابه بوده و دارای هدر هستند.

tdkhakpur
چهارشنبه 27 مرداد 1389, 16:24 عصر
توابع و شرح کار توابع irdblib.dll از پایگاه داده irdataBase:
1- ایجاد و ازادسازی موتور جستجو:


procedure irInit; stdcall; external DLLAddress;
procedure irFree; stdcall; external DLLAddress;


متد irInit باید قبل از فراخوانی توابع موجود در کتابخانه اجرا شده و در پایان کار به هنگام خروج از برنامه irFree اجرا شود
2- استفاده و یا باز نمودن جدول یا فایل داده( irbopen):


function irbopen(FileName:pchar; pass : pchar): Smallint; stdcall; external DLLAddress;

متد irbopen پایگاه داده را برای دسترسی باز میکند و هندل دسترسی به دیتابیس را برای شما برمیگرداند این شماره هندل در تمامی توابع برای دسترسی به داده های دیتابیس مورد استفاده قرار میگیرد.
به همین دلیل برای هر پایگاه داده ای که باز میکنید یک متغییر از نوع smallint در نظر بگیرید تا از طریق ان به داده ها دسترسی داشته باشید.
توجه مهم:
برای اینکه داده هایی که برای یک برنامه مینویسید بصورت رمز شده باشد به صورتی که برنامه هایی دیگر که توسط سایرین نوشته میشود دستکاری نشود گزینه پسورد را که حداکثر 8 بایت میتواند به عنوان رمز دریافت کند را در هنگام باز نمودن دیتا بیس توسط irbopen اعمال کنید مانند زیر

irdbHandle := irbopen(PChar(Edit1.Text), 'PaSsWoRd');
توجه:
اگر هکرها قصد دسترسی و رمزگشایی غیر مجاز داشته باشد دیتابیس از بین خواهد رفت.
3- نوشتن داخل پایگاه داده:


function irvwrite (irHandle:Smallint; data:pchar; Len:longint) : Smallint; stdcall; external DLLAddress;

بعد از اینکه دیتابیس باز شد میتوانید توسط ivwrite یک رکورد با مشخصات مشابه که توسط irDataBase.exe ساخته اید داخل بانک بیفزایید.
در فوق irHandle دستگیره باز شده توسط bopen هست و data آدرس رکوردی هست که باید در پایگاه داده قرار بگیرد و Len طول رکورد که توسط sizeof بدست می آید.
تذکر مهم اینکه اگر رکوردی را که بصورت سورس ایجاد میکنید با آنجه که شما در داخل irDataBase.exe برای دیتابیس در نظر گفته اید متفاوت باشد این متد errore خواهد داد.مثلا برای Name اندازه 32 در نظر گرفته شده باشد و شما داخل رکورد که بصورت سورس ایجاد میکنید اندازه مثلا 33 یا کوچکتر بدید.
4- تغییر رکورد یا داده ها:


function irvrewrite(irHandle:Smallint; data:pchar; Len:longint) : Smallint; stdcall; external DLLAddress;

برای انجام این کار از متد irvrewrite استفاده میشود کلیه پارامترهای موجود مشابه توضیحات بالاست.
برای تغییر یک رکورد نیاز هست که کلید رکورد مورد نظر مشخص باشد به فرض اگر شما از کلید اول یا ایندکس اول استفاده میکنید و میدانید که کلید اول فقط شامل فیلد Id هست پس تنها فیلدی که باید مشخص کنید Id هست مثال زیر نام و نام خانوادگی شخصی که id آن 132 بوده است را تغییر میدهد.


irbsetindex(irHandle, 0); // ایندکس را مشخص میکند یعنی کلید مورد نظر ما اولین کلید هست
prs.Id := 123; //
irstrcpy(@prs.Name[1], pchar(Edit3.Text)); // محتوای این را داخل ساختار قرار میدهد
irstrcpy(@prs.Fam[1], pchar(Edit4.Text));//محتوای نام خانوادگی را داخل ساختار قرار میدهد.
irvrewrite(irdbHandle, pchar(@prs), sizeof(prs));

اگر مقدار برگشتی از vrewrite مقداری غیر از صفر باشد میتواند یکی از کدهای زیر باشد.


#define DB_FILE_NOT_OPEN 1
#define INDEX_FILE_NOT_OPEN 2
#define FILE_EMPTY 3
#define KEY_NOT_FOUND 4
#define BOTTOM_OF_INDX 5
#define TOP_OF_INDX 6
#define RECORD_FOUND 7
#define RECORD_NOT_FOUND 8
#define RECORD_DELETED 9
#define LESS_THAN_FIX_LEN 10
#define FILE_FULL 11
#define CANNOT_WRITE 12
#define CANNOT_REWRITE 13
#define CANNOT_DELTETE 14
#define CANNOT_READ 15
#define BUFFER_SIZE 16
#define FILE_NOT_CLOSE 17

4-خوانده رکورد مشخص:
برای خواندن داده ها از irvread استفاده میشود و روش مشابه کارهای فوق هست و شما باید ایندکسی را که میخواهید داده ها از آن خوانده شوند را مشخص کنید و با توجه به ایندکس فیلدهای کلیدی ساختار را پر کنید.
5-حذف رکورد مشخص:
برای حذف داده ها از irvdelete استفاده میشود و روش مشابه کارهای فوق هست و شما باید با توجه به ایندکس کلیدهای رکورد را مشخص کنید تا توسط irvdelete پیدا شده و حذف شود.
دسترسی ترتیبی:
برای هر کلید و یا ایندکسی که تعریف میکنید یک شماره از 0 تا n قرار داده میشود مثلا کلید شماره 1 دارای شماره ایندکس 0 و کلید شماره 2 دارای ایندکس به شماره 1 و ... هست.
برای اینکه شما به دادها بصورت سری و با نظم موجود در کلیدها که طراحی کرده اید دسترسی پیدا کنید با استفاده از bsetindxe کلیدتان را انتخاب میکنید و با بصورت زیر اولین رکورد را پیدا میکنید.


var
RtnVal : smallInt;

irbsetindex(irdbHandle, 1); // ترتییب بر اساس مثلا name+fam+id
RtnVal = irvtop(irdbHandle, pchar(@prs), sizeof(prs));

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


var
RtnVal : smallInt;

irbsetindex(irdbHandle, 1); // ترتییب بر اساس مثلا name+fam+id
RtnVal = irvtop(irdbHandle, pchar(@prs), sizeof(prs));
while RtnVal=0 do
begin
// اینجا میتوانید داده ها را برای پردازش داشته باشید.
RtnVal = irvnext(irdbHandle, pchar(@prs), sizeof(prs));
end;

توجه داشته باشید برای اینکه اعمال فوق را به حالت برعکس داشته باشید از irvbot , irvprev استفاده کنید.
توابع جانبی:


irmemcpy // برای کپی محتوای حافظه درون حافظه دیگر
irmemset // محتوای حافظه را با کاراکتر خاص پر میکند
irsrcpy // کپی رشته
irbnorecs // تعدار رکورهای موجود در داخل دیتا بیس را برای شما برگشت میدهد

قفل نمودن دیتا بیس:
برای این کار از irblock, irbunlock استفاده میشود
ایجاد کنترل برای dbgride و یا کنترل مخصوص گزارشات:
برای این کار میتوانید از تابع irvdirectread استفاده کنید این تابع مشابه تابع irvreread هست با این تفاوت که شما میتوانید شماره رکورد را درش قید کنید تا فقط داده های رکورد مورد نظر سریعا دریافت شود در دموی شماره 2 این امکان اضافه شده تا بتوانید dbgride شخصی بسازید.

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

golbafan
جمعه 05 شهریور 1389, 11:54 صبح
سلام

كار با ديتابيس شما خيلي مشكله و ادمو ياد foxpro تحت داس ميندازه

يك فكري به حالش بكنيد

tdkhakpur
دوشنبه 15 شهریور 1389, 18:50 عصر
كار با ديتابيس شما خيلي مشكله و ادمو ياد foxpro تحت داس ميندازه
يك فكري به حالش بكنيد

قرار نیست خشک و خالی ارش استفاده کنید میتوانید ارتقا بدید اگر نمیدانید بسط دادن یا ارتقا چیه بپرسید اگر ندونستم سایر دوستان راهنماییت کنن.

hadisalahi2
دوشنبه 15 شهریور 1389, 21:15 عصر
آیا بانک اطلاعاتی شما قابلیت استفاده به صورت شبکه رو هم داره و میشه اون رو روی هاست هم منتقل کرد؟

tdkhakpur
دوشنبه 15 شهریور 1389, 21:49 عصر
آیا بانک اطلاعاتی شما قابلیت استفاده به صورت شبکه رو هم داره و میشه اون رو روی هاست هم منتقل کرد؟

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

golbafan
شنبه 27 شهریور 1389, 20:36 عصر
قرار نیست خشک و خالی ارش استفاده کنید میتوانید ارتقا بدید اگر نمیدانید بسط دادن یا ارتقا چیه بپرسید اگر ندونستم سایر دوستان راهنماییت کنن.

اتفاقا بنده ميدانم كه ارتقا چي بيده

ولي با وجود ديتابيس هاي قدرتمند دنيا حوصله آپديت ديتابيس شما نيسته

چرا؟

چون اپن سورس هاي بهتري هم هست كه وقت بگذاريم

tdkhakpur
شنبه 27 شهریور 1389, 21:05 عصر
چون اپن سورس هاي بهتري هم هست كه وقت بگذاريم

خب وقتی سورس دیتابیس دست مردم باشه به چه دردی میخوره؟!!

esmit61
یک شنبه 28 شهریور 1389, 00:42 صبح
خب وقتی سورس دیتابیس دست مردم باشه به چه دردی میخوره؟!!
!!!!!!!!!!!!
منظورتون چیه ؟

tdkhakpur
یک شنبه 28 شهریور 1389, 01:55 صبح
تابع irvdelete هم که سحوا جا مانده بود برای حذف رکوردها در صفحه اول ارسال شد میتوانید دمو را مجددا دانلود کنید.

BORHAN TEC
یک شنبه 04 مهر 1389, 19:41 عصر
این دیتابیس ایرانی است؟؟؟؟
اگر هست پیشنهاد می کنم که یک درایور dbExpress برای آن نوشته شود.

tdkhakpur
یک شنبه 04 مهر 1389, 19:59 عصر
اگر هست پیشنهاد می کنم که یک درایور dbExpress برای آن نوشته شود.
این خودش درایور هست برای چی باد یکی دیگه نوشته بشه؟!!
همانطور که از اسم تاپیک هم مشخصه این موتور داده های اطلاعاتی زیربنای بانکهای اطلاعاتیه یعنی هر کسی میتونه از این طریق کامپوننتهای شخصی پیاده سازی کنه و داده ها را طوری رمز گزاری کنه که حتی من هم که طراح این موتور بانک اطلاعاتی هستم نتونم داده ها را بدون مجوز برنامه نویس که قبلا به بانک داده را دستکاری کنم.

BORHAN TEC
یک شنبه 04 مهر 1389, 20:10 عصر
اگه قصد ندارین کدش رو قرار بدین، میشه بگین چند خط براش کد نوشتین(حس کنجکاویه دیگه) :قلب:

tdkhakpur
یک شنبه 04 مهر 1389, 20:48 عصر
میشه بگین چند خط براش کد نوشتین

حدودا 2000 میشه.

BORHAN TEC
سه شنبه 06 مهر 1389, 13:53 عصر
برنامه رو تست کردم.
یک پیشنهاد در مورد آن دارم: این dll به یکسری Runtime Package نیاز دارد که اگر این گونه نبود به نظر من بهتر میشد.

امیدوارم که موفق باشید.:قلب:
اگه وقت به من اجازه بده می خواستم که من هم در این پروژه شدیداً همکاری کنم!!! :لبخند:
به عنوان مثال ساخت یک IDE و کامپوننت های مربوطه. :چشمک:


.

BORHAN TEC
سه شنبه 06 مهر 1389, 15:08 عصر
:شیطان: گزارش خطا:
در آن دمویی که قرار داده اید، من هر کاری که می کنم، برنامه در هنگام اجرا پیغام do not find database file. را نشان می دهد.




.

bootshow
سه شنبه 06 مهر 1389, 16:22 عصر
لطفا زمانیکه فایل dll را میخواهید کامپایل کنید از قسمت installpackage تیک Build with runtime packages را بردارید و دوباره فایل کامپایل شده را آپلود کنید.
بعنوان مثال rtl120.dll لازم است که ورژن دلفی من 2010 هست.
بهتر است که یک دمویی درست کنید که چندین هزار رکورد بصورت تصادفی اضافه کنه و اونو با چند دیتابیس دیگه مقایسه کنید

tdkhakpur
سه شنبه 06 مهر 1389, 18:07 عصر
لطفا زمانیکه فایل dll را میخواهید کامپایل کنید از قسمت installpackage تیک Build with runtime packages را بردارید و دوباره فایل کامپایل شده را آپلود کنید.


برای دلفی هم مجددا کامپایل شد میتوانید برای کدهای آپدیت شده کلی ازhttp://barnamenevis.org/forum/showpost.php?p=1069666&postcount=1 و اگر فقط احتیاج به دمو دارید از http://barnamenevis.org/forum/showpost.php?p=1070283&postcount=6 دانلود کنید.

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

tdkhakpur
جمعه 09 مهر 1389, 20:42 عصر
دیتابیس مجددا update و همچنین در گزینه حذف و نحوه لیست گیری به دمو اضافه شد.
برای کدهای آپدیت شده کلی ازhttp://barnamenevis.org/forum/showpo...66&postcount=1 (http://barnamenevis.org/forum/showpost.php?p=1069666&postcount=1) .
و برای راهنمای استفاده و نیز دمو از http://barnamenevis.org/forum/showpo...83&postcount=6 (http://barnamenevis.org/forum/showpost.php?p=1070283&postcount=6) دانلود کنید.

bootshow
یک شنبه 11 مهر 1389, 13:26 عصر
دیتابیستون کمی مشکل داره.دموی زیر را دانلود کنید.
ListData را بزنید و سعی کنید رکوردی که در لیست نمیباشد را اضافه کنید، مشاهده میکنید که اضافه نمیشود.
یک ربطی به عدد 255 داره.یعنی یکی از متغیرهاتونو از نوع بایت تعریف کردید.

tdkhakpur
یک شنبه 11 مهر 1389, 19:21 عصر
یک ربطی به عدد 255 داره.یعنی یکی از متغیرهاتونو از نوع بایت تعریف کردید.
من با سی کار میکنم تغییر برای دلفی یه ذره به ریزه کاری احتیاج داشت(irdblib.dll برای دلفی) اصلاح شد.
دموی اول تغییر داده شده برنامه شماست و دموی دوم طرز ساخت dbControl.
در ضمن irdirectread به کتابخانه اضافه شده است.

tdkhakpur
جمعه 16 مهر 1389, 21:16 عصر
ایجاد امنیت به داده ها:
با توجه به اینکه قبلا در صفحه اول اعلام شده بود که توابع جدید به روز خواهند شد یک قسمت برای رمز گزاری شخصی هم به متدها اضافه شده که از این طریق امنیت به داده ها با دادن رمز شخصی اعمال شود تا برنامه های که از این موتور دیتا بیس استفاده میکنند در صدد دسترسی به داده هایی که سایرین نوشته اند نداشته باشند.
مثلا اگر یک از دوستان یک دیکشنری با این دیتابیس نوشته باشد احتمالا از این ترس دارد که سایر دوستان فایل بانک دیکشنری برنامه نویس فوق را باز نموده و برای برنامه خودشان استفاده کنند که این خود نوعی کپی غیر مجاز به حساب می آید که برای این منظور در متد irbopen گزینه ای به عنوان pass که جمعا 8 بایت هست قرار داده میشود که هر برنامه نویس میتواند انرا به برنامه بدهد تا امنیتی خاص به داده های خودشان بدهد.
تذکر برای هکرها:
اگر هکرهای محترم اقدام به رمزگشایی این دیتابیس نمایند در صورت 5 مرتبه اشتباه دیتابیس از بین خواهد رفت.
نحوه استفاده توسط دموی که در http://barnamenevis.org/forum/showpo...83&postcount=6 (http://barnamenevis.org/forum/showpost.php?p=1070283&postcount=6) هست را میتوانید با توضیحات بدست بیارید.

golbafan
شنبه 15 مرداد 1390, 19:20 عصر
در کل من ترجیح میدم ار مای اسکیو ال استفاده کنم... خیالم راحته