من كام يوم جالى تليفون فى منتصف الليل تقريبا وانا بلعب كورة :) من صديقى الصدوق Hackobacko بيدعونى للمشاركة فى اجتماع على ال IRC على قناة sowarna للبدأ فى المشاركة فى تطوير مشروع sowarna
http://code.google.com/p/sowarna/
فى مجموعة حاجات مثيرة للإهتمام فى المشروع زى thrift و
Tokyo Cabinet وهى
هى مكتبة لإدارة قاعدة بيانات "ملف يحوى مجموعة من السجلات records” كل واحد منها عبارة عن مفتاح وقيمة.. انشئت لتحل مكان GDBM و QDBM وتتميز
حجم قاعدة البيانات اقل ،وسرعة معالجة، اداء عالى فى بيئة متعددة الخيوط، وAPI وبسيطة والعديد..
TokyoCabinet مكتوبة بلغة سى ومتوفرة لPerl, Ruby, Lua, Java , Python
** من http://tokyocabinet.sourceforge.net/
السجلات بيتم تنظيمها فى Hash table او شجرة B+ او فى مصفوفة محددة الطول -خارج اهتمامنا-
بالنسبة لقاعدة البيانات من Hash table او HDB يجب ان تكون كل المفاتيح فريدة -مستحيل تضيف سجلين بنفس المفتاح-
تقدر تتعامل بتخزين سجل مكون من مفتاح وقيمة، حذف، الحصول على سجل عن طريق المفتاح.. او حتى امكانية المرور على كل مفتاح.
قاعدة البيانات من شجرة B+ او BDB نفس السابقة ولكن تسمح بإمكانية وجود اكثر من سجل بنفس المفتاح. ويتم تخزين السجلات عن طريق دالة مقارنة يحددها المستخدم
1- الإعداد ابحث عن tokyocabinet فى مدير الحزم وقم بتستيبها .. اذا فضلت التستيب اليدوى قم بتحميل الملفات المصدرية واتبع ملف ال README او INSTALL
2- قم بتستيب pytc بإستخدام easy_install او بأى طريقة تريحك
نقوم بالتجربة
1- استدعى tc
>>> import tc
2- شوف الإصدار اللى عندك
>>> tc.__version__ '0.7.2'
3- جميل عايزين نشوف ايه الأنواع المتاحة عندنا
>>> filter(lambda x: x.endswith("DB"), dir(tc))
['BDB', 'HDB']جميل عندنا B+ Tree و عندنا Hash table
4- ننشئ ملف وليكن ارقام تليفونات ونحدد المود "OCREAT” للإنشاء او "OWRITER” للكتابة
>>> hdb=tc.HDB("phonesdb", tc.HDBOWRITER|tc.HDBOCREAT)
>>> hdb
<tc.HDB object at 0xb7fd75d8>5- عندنا شوية ميثودز مهمة
open لفتح الداتابيز -زى ماتم استخدامها فى المشيّد-
close لغلق الداتابيز
path هو مسار الداتابيز
put لتخزين سجل
get للحصول على سجل
out حذف سجل
vanish حذف كل السجلات
rnum للحصول على عدد السجلات.. مع len نفس الشئ
iterinit لتجهيز الiterator
iternext للحصول على العنصر التالى فى ال iterator
ecode للحصول على اخر ايرور
errmsg للحصول على رسالة واضحة عن -رقم الإيرور-
addint/adddouble لإضافة int او double
tranbegin لبدا transaction
trancommit للتنفيذ
tranabort لإلغاءه
fsiz للحصول على مساحة الداتابيز
بخصوص ال bdb فليها بعض الميثودز الخاصة زى
getlist للحصول على كل السجلات بمفتاح معين
outlist لحذف كل السجلات بمفتاح معين
putlist لوضع مجموعة من السجلات "مجموعة قيم ذات مفتاح واحد"
putdup وضع سجل مع سماحية تكرار المفتاح
السجلات الإبتدائية
>>> hdb.put("ahmed", "012352132 ")
>>> hdb.put("khaled", "013245123")
>>> hdb.put("ayman", "0231312")
>>> hdb.put("salma", "011124642")الحصول على سجل
>>> hdb.get("ayman")
'0231312'الحصول على كل السجلات بالطريقة البايثونية وهى اللى تهمنا
>>> for key,value in hdb.iteritems(): ... print key, value ... ahmed 012352132 khaled 013245123 ayman 0231312 salma 011124642
الطريقة الأخرى بإستخدام iterinit و iternext تقدر تراجع وثائق tokyocabinet للحصول على مثال
حذف سجل
>>> hdb.out("khaled")قفل الداتابيز
>>> hdb.close()
اى اضافات مرحب بيها :)