PDA

View Full Version : جستجوی 10000 لغت از میان دیتابیسی با 600 رکورد



hossein71
یک شنبه 30 خرداد 1389, 08:32 صبح
فکر می کنم برای این نوع جستجو اگر بیاییم برای هر لغت به دیتابیس مراجعه کنیم،راه خوبی برای جستجوی لغت در دیتابیس نباشد.من خودم دارم در این مورد فکر می کنم که آیا راه کوتاه تری هست یا نه.دوستان نظر شون رو بیان کنند و اگر راهی می دونن به ما هم بفرمایند.

Felony
یک شنبه 30 خرداد 1389, 08:39 صبح
البته من در VB تجربه چندانی ندارم و شاید راه حل بهتری باشه ، یکی از راهاش این هست که مقدار این 600 رکورد رو تو یه آرایه بریزی بعد در این آرایه جست و جو کنی .

skh1300
یک شنبه 30 خرداد 1389, 23:54 عصر
سلام
می تونی لغت ها را دسته بندی کنی و اونا را در چند گروه مختلف بزاری و بعد برای سرچ اقدام کنی

ENG_Torshani
دوشنبه 31 خرداد 1389, 18:52 عصر
دوست عزیز این حجم Entity که شما داری حجم کمیه و راحت میشه با امکاناتی که خود بانکها در اختیار میزارن جستجو کرد

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


1)Fuzzy String Search
منطق فازی با این سیستم کار میکنه که شروع به وزن دهی به کلمات میکنه و در هنگام جستجو با این وزن ها سر کار داره

bitap algorithm




#include <stdlib.h>
#include <string.h>

typedef char BIT; /* needs only to hold the values 0 and 1 */

const char *bitap_search(const char *text, const char *pattern)
{
const char *result = NULL;
int m = strlen(pattern);
BIT *R;
int i, k;

if (pattern[0] == '\0') return text;

/* Initialize the bit array R */
R = malloc((m+1) * sizeof *R);
R[0] = 1;
for (k=1; k <= m; ++k)
R[k] = 0;

for (i=0; text[i] != '\0'; ++i) {
/* Update the bit array. */
for (k=m; k >= 1; --k)
R[k] = R[k-1] && (text[i] == pattern[k-1]);

if (R[m]) {
result = (text+i - m) + 1;
break;
}
}

free(R);
return result;
}



SubString Index

روش جستجوی Windows این نیاز به نوشتن یک Engine دارد

SQl Full String Search(مخصوص sql)


شما در اینترنت میتونی از Parser های که موجود هست استفاده کنی و اکثر آنها از C++‎ استفاده میکنند و Headr فایلی به نام Map

hossein71
دوشنبه 31 خرداد 1389, 19:28 عصر
ضمن تشکر بسیار گرم از جناب ENG_Torshani
من اطلاعات زیادی در مورد این مطالبی که فرمودید ندارم خیلی ممنون میشم اگر:
درمورد روش اول کمی توضیه بدین.(چون زبانی که نوشتین vb نیستش(فکر میکنم C‎‎ باشه)و من با vb کار میکنم)
درمورد روش دوم هم توضیحات بیشتری بدین برای پیداکردن راحت تر مطالب.
زبان مورد استفاده:vb6
نرم افزار مورد استفاده برای دیتابیس:Access

ENG_Torshani
دوشنبه 31 خرداد 1389, 21:40 عصر
دوست عزیر شما لطف کن بانک رو برام بفرست ببینم چه میخوای بکنی بد بهت توضیح میدم از کدوم روش استفاده کنی و منابع رو هم در اختیارت میذاروم ولی اگه بانکت Access هستش من توصیه میکنم عوضش کنی یکی از مشکلات برنامه نویسای ایرانی اینه که access رو به عنوان بانک اطلاعاتی استفاده میکنند من توصیه میکنم از sql استفاده کنی و برای اینکه مشکل اجرای نداشته باشی از ورژن Client برای User هات استفاده کنی که اگر از sql استفاده کنی sql full text search راه خوبیه واسه برنامه شما

hossein71
دوشنبه 31 خرداد 1389, 22:45 عصر
کتاب خوبی برای یادگیری SQL به زبان فارسی میشناسید به من معرفی کنید.

ENG_Torshani
دوشنبه 31 خرداد 1389, 23:05 عصر
کتاب خوبی برای کار کردن با TSQL یعنی زبان sql دارم email بده برات بفرستم

بهتره برای کار کردن با Enterprice manager sql 2000 هم از cd های آموزشی استفاده کنی

بهتره برای کار با vb از sql 2000 استفاده کنی البته ورژنهای بالاتر مشکلی پیش نمیاره ولی از محیطهای پیچیده تری برخوردارندو روی پلت فرم .Net هستن که من به هیچ برنامه نویس درست حسابی توصیه نمیکنم تا پلت فرمهای مثل Rubby,Kdevelop,Code Blocks و QT هستش سراغ این پلتفرم بیخود Microsoft برن

hossein71
سه شنبه 01 تیر 1389, 07:46 صبح
ضمن تشکر از شما
آیا نرم افزاری برای تبدیل دیتابیس Access به SQL هست؟

ENG_Torshani
سه شنبه 01 تیر 1389, 10:32 صبح
به نرم افزار خاصی احتیاج نیست فقط لازمه اطلاعات بانک access رو تو sql Improt کنی

وقتی یاد بگیری sql کاری نداره انجامش میدی

Felony
پنج شنبه 03 تیر 1389, 11:11 صبح
دوست عزیر شما لطف کن بانک رو برام بفرست ببینم چه میخوای بکنی بد بهت توضیح میدم از کدوم روش استفاده کنی و منابع رو هم در اختیارت میذاروم ولی اگه بانکت Access هستش من توصیه میکنم عوضش کنی یکی از مشکلات برنامه نویسای ایرانی اینه که access رو به عنوان بانک اطلاعاتی استفاده میکنند من توصیه میکنم از sql استفاده کنی و برای اینکه مشکل اجرای نداشته باشی از ورژن Client برای User هات استفاده کنی که اگر از sql استفاده کنی sql full text search راه خوبیه واسه برنامه شما

با اینکه این طور بحث ها آخر به جنجال کشیده میشه ولی مجبورم :

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

اخوی بانک ایشون 600 رکورد داره اون وقت میگی برو از SQL Server استفاده کن ؟ با این تفاصیر اگه شما برنامه نویس دیکشنری بابیلون بودی 100 % از SQL Server استفاده میکردی ؟!
الان چندین برنامه متن باز هستن که در حد چند هزار رکورد دارن و از اکسس استفاده میکنن و در ضمن ایرانی هم نیستند .

حداقل میگفتی SQLite که از لحاظ فنی قابل درک باشه .

ENG_Torshani
پنج شنبه 03 تیر 1389, 12:27 عصر
با اینکه این طور بحث ها آخر به جنجال کشیده میشه ولی مجبورم :

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

اخوی بانک ایشون 600 رکورد داره اون وقت میگی برو از SQL Server استفاده کن ؟ با این تفاصیر اگه شما برنامه نویس دیکشنری بابیلون بودی 100 % از SQL Server استفاده میکردی ؟!
الان چندین برنامه متن باز هستن که در حد چند هزار رکورد دارن و از اکسس استفاده میکنن و در ضمن ایرانی هم نیستند .

حداقل میگفتی SQLite که از لحاظ فنی قابل درک باشه .



بهتره شما یکسری به سایت مایکروسافت بزنید ببینید چرا Access رو تولید کرده access یک برنامه مدیریت اطلاعات برای User های Low Level هستش مثل مدیرا که میخوان مدیرتی رو Data های خود داشته باشد و نیازی به محیطهای Developer نداشته باشند

من منظورم از sql کل خانواده sql بود شما میتونی از sql استفاده کنی و client رو سیستم user نصب کنی

از سال 2001 Access دیگه به عنوان یک بانک اطلاعاتی برای Developer ها استفاده نشد و سندیت حرف من رو هم تو Help .Net میتونی ببینی که چرا توضیح داده Engine تخصصی مثل Data برای کار با Access مثل ویژوال استودیو 6 عرضه نکرده و Engine خود را با Sql ست کرده است.


درباره نرم افزارهای Open Source هم عزیز من 7 ساله دارم تو این زمینه کار میکنم طراحی هوش , و ساخت رباتهای Rescue رو دارم انجام میدم یک تجربه است هیچ وقت نرم افزار Open Source استنادی به درستی Platform نیست من خودم شخصه با این که تعصب دارم که اصول کد نویسی رو رعایت کنم ولی به جرات میگم 20% هم نتونستم موفق باشم

واسه تمام این حرفام هم سند دارم بدش مقایسه کردن Access یا Sql کار اشتباهی چون فیلدهای جدای دارن ولی شما اگه بک روز Sql , Oracel رو با هم مقایسه کنید و بگید من اشتباه میکنم حق دارید.

الان هم راستی لیست برنامه های ساده Application که شما ازشون استفاده میکنید و از بانک Sql استفاده میکنند ندارم ولی به زودی براتون میفرستم

در ضمن بانک Babylon هم از فایل استفاده میکنه بهتر نبود از access استفاده کنه چرا خودشو اذیت میکنه.
سیستم جستجوی babylon از نوع Index هستیش
دقیقا نوع موتوری که google داره اول اطلاعات رو به صورت فایلهای Text در چندیدن لایه مشخص طبقه بندی میکنه بدش Result های که از این فایلها بدست میاد رو تو بانک Oracel ذخیره میکنه که حجم بانکش بیاد پائین

اگه می بینید من به این دوست محترم sql رو پیشنهاد کردم به خاطر اینکه بتونه از امکانات بانک بهره ببره تو جستجو و اگه میخوان بگین که همون امکانات تو Access هم هست من 20 تا مورد برخورد که نشان دهنده عدم هماهنگی Access با محیط های Coder هست رو براتون میذارم

Felony
پنج شنبه 03 تیر 1389, 13:01 عصر
بهتره شما یکسری به سایت مایکروسافت بزنید ببینید چرا Access رو تولید کرده access یک برنامه مدیریت اطلاعات برای User های Low Level هستش مثل مدیرا که میخوان مدیرتی رو Data های خود داشته باشد
قرار نیست برای هر کاری از SQL استفاده بشه ، تو یکی از وبلاگ های یکی از بچه های مایکروسافت دقیقا یکسری توضیحات داده بود در همین مورد که همیشه قدرت سرعت و بازدهی رو بالا نمیبره و هر چیزی باید به جا استفاده بشه و یکسری توضیحات تکملی ، دارم دنبال لینکش میگردم تا بزارم ...


من منظورم از sql کل خانواده sql بود شما میتونی از sql استفاده کنی و client رو سیستم user نصب کنی
کل خانواده SQL یعنی چی ؟ SQL فقط یک زبان رابط هست ...

و اگر منظورتون پایگاه هایی هست که از این زبان پشتیبانی میکنن ، اکسس ، اوراکل ، MySQL , SQLite , SQL Server همه از این زبان رابط پشتیبانی میکنن .


از سال 2001 Access دیگه به عنوان یک بانک اطلاعاتی برای Developer ها استفاده نشد و سندیت حرف من رو هم تو Help .Net میتونی ببینی که چرا توضیح داده Engine تخصصی مثل Data برای کار با Access مثل ویژوال استودیو 6 عرضه نکرده و Engine خود را با Sql ست کرده است.
Engine به صورت پیش فرض بر این اساس ست شده و این دلیل بر این نیست که نباید از اکسس استفاده کرد ، مایکروسافت با توجه به روزافزونی اطلاعات و حجم وسیع و حجیم اونها پایگاه رو به صورت پیش فرض با SQL Server ست کرده ولی جایی نگفته که برادران Developer از اکسس استفاده نکنید !
برای استفاده از اکسس هم به صورت جداگانه موتور جدید عرضه میشه و همونطور که گفتم به صورت پیش فرض نصب نیست ( البته برای نسخه های جدید اکسس مثل 2010 و 2007 ) ولی موتور نسخه های قدیمی تر مثل 2003 پیش فرض نصب هست .

در هر صورت به نظر من برای 600 رکورد استفاده از SQL Server عاقلانه نیست ، اگر غیر فنی نبود برای 600 رکورد حتی استفاده از فایل های ini هم کافی بود چه برسه به Access !

ENG_Torshani
پنج شنبه 03 تیر 1389, 13:14 عصر
قرار نیست برای هر کاری از SQL استفاده بشه ، تو یکی از وبلاگ های یکی از بچه های مایکروسافت دقیقا یکسری توضیحات داده بود در همین مورد که همیشه قدرت سرعت و بازدهی رو بالا نمیبره و هر چیزی باید به جا استفاده بشه و یکسری توضیحات تکملی ، دارم دنبال لینکش میگردم تا بزارم ...


کل خانواده SQL یعنی چی ؟ SQL فقط یک زبان رابط هست ...

و اگر منظورتون پایگاه هایی هست که از این زبان پشتیبانی میکنن ، اکسس ، اوراکل ، MySQL , SQLite , SQL Server همه از این زبان رابط پشتیبانی میکنن .


Engine به صورت پیش فرض بر این اساس ست شده و این دلیل بر این نیست که نباید از اکسس استفاده کرد ، مایکروسافت با توجه به روزافزونی اطلاعات و حجم وسیع و حجیم اونها پایگاه رو به صورت پیش فرض با SQL Server ست کرده ولی جایی نگفته که برادران Developer از اکسس استفاده نکنید !
برای استفاده از اکسس هم به صورت جداگانه موتور جدید عرضه میشه و همونطور که گفتم به صورت پیش فرض نصب نیست ( البته برای نسخه های جدید اکسس مثل 2010 و 2007 ) ولی موتور نسخه های قدیمی تر مثل 2003 پیش فرض نصب هست .

در هر صورت به نظر من برای 600 رکورد استفاده از SQL Server عاقلانه نیست ، اگر غیر فنی نبود برای 600 رکورد حتی استفاده از فایل های ini هم کافی بود چه برسه به Access !




نام زبان رابطه Tsql هستش بدشم دوست عزیز من رو اصول پایبندم سعی میکنم هم رعایت کنم

شما اسم شمارنده for رو بزاری i,j کار میکنه IntCount هم بزاری کار میکنه بدشم من فکر کنم سایت مایکروسافت معتبرتر باشه تا یک Weblog

خودتنم اشاره میکنید که بانک به sql تغییر کرده و هنگام نصب .Net نسخه Experes sql نصب میشه که بسیار سبکه ولی قبول نمیکنید که Access بانک برای نوشتن نرم افزار نیست

اگه من دوست ندارم برنامه خودمو رو اصول بنویسم دلیل بر این نمیشه اصلها غلطا

Felony
پنج شنبه 03 تیر 1389, 13:18 عصر
واسه تمام این حرفام هم سند دارم بدش مقایسه کردن Access یا Sql کار اشتباهی چون فیلدهای جدای دارن ولی شما اگه بک روز Sql , Oracel رو با هم مقایسه کنید و بگید من اشتباه میکنم حق دارید.
برادر من مقایسه ای صورت نگرفته ، اکسس اصلا در حدی نیست که بشه با SQL مقایسش کرد ، فقط میگم اکسس هم کارش رو به خوبی راه میاندازه !


در ضمن بانک Babylon هم از فایل استفاده میکنه بهتر نبود از access استفاده کنه چرا خودشو اذیت میکنه.
بنده نگفتم بهتر بود از اکسس استفاده کنه ، اون فایلی هم که شما میگی بابیلون ازش استفاده میکنه من کامل بررسی نکردم ولی ساختار کلی شبیه SQLite بود .


اگه می بینید من به این دوست محترم sql رو پیشنهاد کردم به خاطر اینکه بتونه از امکانات بانک بهره ببره تو جستجو و اگه میخوان بگین که همون امکانات تو Access هم هست من 20 تا مورد برخورد که نشان دهنده عدم هماهنگی Access با محیط های Coder هست رو براتون میذارم
من کی گفتم تو اکسس هم این امکانات هست ؟ میگم برای کار ایشون اکسس کافی هست ، چند وقت پیش یک برنامه یکی از بچه های دانشگاه نوشته بود و توش از SQL Server استفاده کرده بود و وقتی بهش گفتم برای چی این کار رو کردی گفت شنیدم Stored Procedure داره و کلی امکانات دیگه در صورتی که یکی از این امکانات تو برنامش نیاز نبود و به کار نرفته بود !!! ، خوب به نظر شما این کار درسته ؟!

Felony
پنج شنبه 03 تیر 1389, 13:23 عصر
اگه من دوست ندارم برنامه خودمو رو اصول بنویسم دلیل بر این نمیشه اصلها غلطا
این اصول از کجا میان ؟ لطفا لینکی از سایت مایکروسافت بزارید که گفته باشه اصول نوشتن برنامه های مرتبط با بانک اطلاعاتی استفاده از SQL هست یا استفاده از اکسس رو به عنوان بانک برای 600 رکورد رو غیر اصولی تلقی کرده باشه .

ENG_Torshani
پنج شنبه 03 تیر 1389, 13:27 عصر
حرف شما کاملا درسته آدم نصبت به نیازهاش از برنامه ها استفاده میکنه یک مبحثی هست اینم اینکه من بعد از 7-8 استفاده کردن از Vb فهمیدم بهترین engine adaodb هستش و بهتره از tsql برای مدیریت بانک استفاده کنم ولی من بهتون نشون میدم مشکلاتی که وقتی شما یک پارامتر Tsql رو به از برنامه ارسال میکنید به بانک چی پیش میاد. و همه اینا به علت عدم هماهنگی بین برنامه هاست

Felony
پنج شنبه 03 تیر 1389, 15:16 عصر
حرف شما کاملا درسته آدم نصبت به نیازهاش از برنامه ها استفاده میکنه یک مبحثی هست اینم اینکه من بعد از 7-8 استفاده کردن از Vb فهمیدم بهترین engine adaodb هستش و بهتره از tsql برای مدیریت بانک استفاده کنم ولی من بهتون نشون میدم مشکلاتی که وقتی شما یک پارامتر Tsql رو به از برنامه ارسال میکنید به بانک چی پیش میاد. و همه اینا به علت عدم هماهنگی بین برنامه هاست

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

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

یا حق .

ENG_Torshani
پنج شنبه 03 تیر 1389, 16:48 عصر
نه دوست عزیز من عاشق بحث علمیم تا باشه از این بحث ها به خدا خوشحال شدم یک آدم باسواد میبینم


ولی دادا ما کوتاه نمیایم من یک کد برات میفرستم Tsql و بانک Access اگه Debug کردی من حرف شما رو قبول میکنم

hossein71
جمعه 04 تیر 1389, 15:37 عصر
این کدهایی که در کتاب آموزشی گفته رو کجای برنامه باید وارد کنم.(من با محیط SQL آشنا نیستم).
یه سوال دیگه هم داشتم:اگر دیتابیسمون در حد چند صد هزار تا رکورد داشته باشه باز هم سریعترین راه Full String Search هست.

با تشکر