Tokyo Cabinet
Tokyo Cabinet
Tokyo Cabinet


من كام يوم جالى تليفون فى منتصف الليل تقريبا وانا بلعب كورة نقره لتكبير أو تصغير الصورة ونقرتين لعرض الصورة في صفحة مستقلة بحجمها الطبيعي من صديقى الصدوق 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- عندنا شوية ميثودز مهمة
كود PHP:
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()

اى اضافات مرحب بيها نقره لتكبير أو تصغير الصورة ونقرتين لعرض الصورة في صفحة مستقلة بحجمها الطبيعي



Tokyo Cabinet
Tokyo Cabinet
Tokyo Cabinet