الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

مشروع قاموس

بدأه سيبان الدرويش في 4 مارس 2014 · 2 رد · 907 مشاهدة · في الأخبار والنقاشات التقنية
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

انا اريد ان اصنع قاموس .. قادر على التعامل مع اكثر من 160 الف سطر و بسرعة 
استخدمت الفيجوال بيسيك للقراءة من الملفات النصية و لكنه يتأخر جداً عند هذا الحجم من الاسطر
فتركته ينهي المستخدم اول حرفين من الكلمة .. فكانت النتائج سريعة عند الاحرف الاولى من الابجدية و بطيء مرة اخرى

عند البحث عن كلمات تنتهي بالاحرف الاخيرة من الابجدية 
سؤالي .. هل هناك قاموس مفتوح المصدر قادر على التعامل مع هكذا حجم من السطور 
و ما هي انسب و اسرع لغة برمجة و قواعد بيانات للتعامل مع هكذا مشروع 

#2

السلام عليكم ...

  1. لا تستتخدم الملفات , و حاول الاستفادة من إمكانيات الفهرسة في برامج قواعد البيانات مثل  sql server  ..
  2. فهارس اللاحقة و البادئة تسمى Trie  و للاسف لم يتم تطبيقها في قواعد البيانات الشهيرة .. :)
  3. فهرسة البادئة (prefix) (بداية الكلمة) مدعومة في سيكوال سيرفر بشكل افتراضي عند إنشاء فهرس على العمود ...
  4. فهرسة اللاحقة (suffix) (نهاية الكلمة)  غير مدعومة للأسف , يعني لو أردت البحث عن كلمات تنتهي بــ tion  مثلا , فإن سيكوال سيرفر  سيضطر لقراءة كل الاسطر الجدول (يسمى full scan)  ..
  5. يوجد حل التفافي , بإن تخزن الكلمة بشكل صحيح و الكلمة بشكل معكوس (word , reverseWord) و ننشئ فهرسين لكل منهما .. الآن .. لو كان المستخدم يبحث حسب بداية الكلمة نبحث في حقل الــ Word  و لو كان يبحث حسب نهاية الكلمة , نبحث في حقل الــ reverseWord  ...
  6. طبعا هذا سيؤدي لزيادة في الحجم و لكن في قواعد البيانات دائما يوجد صراع بين السرعة و الحجم .. و يفضل السرعة على حساب الحجم لأن أوساط التخزين أصبحت رخيصة جدا ....
  7. تقوم بإنشاء جدول اسمه Dictionary  و فيه الحقول (ID و Word و ReversWord و Meaning) . الحقل ID  مفتاح أساسي .
  8. قم بإدراج بعض البيانات مثل :
    INSERT INTO Dictionary (Word ,ReversWord , Meaning ) VALUES ('boy' , 'yob' , 'ولد')
  9. تقوم بإنشاء الفهارس :
    CREATE NONCLUSTERED INDEX IX_Dictionary_Word   ON Dictionary(Word)  INCLUDE (ID , Meaning)
    CREATE NONCLUSTERED INDEX IX_Dictionary_ReversWord   ON Dictionary(ReversWord)  INCLUDE (ID ,Word , Meaning)
    UPDATE STATISTICS Dictionary;
  10. لمعرفة الخطة التي يتبعها سيكوال سيرفر في جلب البيانات , قم بتنفيذ الأمر :

    SET SHOWPLAN_TEXT ON
  11. الآن قم بتنفيذ الاستعلام :

    SELECT ID , Meaning  FROM Dictionary WHERE Word  LIKE 'bo%';

     ستجد أن سيكوال سيرفر , قام بتنفيذ العملية Index Seek  و هي تعني فقط قراءة بعض السجلات التي تحقق شرط معين و ليس قراءة كل السجلات و بالتالي  استعلام البحث سريع (أما لو حصلت على index scan  تعني قراءة كل السجلات  ) .

  12. البحث بنهاية الكلمة :

    SELECT ID , Word , Meaning  FROM Dictionary WHERE ReversWord  LIKE 'yo%';

     أيضا ستحصل على index seek  ..

  13. استخدم #C  أو VB.NET لبناء واجهات المشروع ..

  14. الموضوع بحاجة ان تقرأ عنه كثيرة و أعطيتك مقدمة له و الباقي يعتمد على جهدك :)

تم تعديل هذه المشاركة بواسطة حسام الشامي في 4 مارس 2014 في 13:53

4

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#3

شكرا جزيلا لك اخي الكريم 
مشاركة قيمة جدا شكرا لك

مواضيع مشابهة