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

Tokyo Cabinet

بدأه ahmed_youssef في 21 يوليو 2009 · 1 رد · 859 مشاهدة · في لغة Python
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

من كام يوم جالى تليفون فى منتصف الليل تقريبا وانا بلعب كورة :) من صديقى الصدوق 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()

اى اضافات مرحب بيها :)

(map share people)

فضلا لاتقم بمراسلتي من أجل أسئلة لها أقسامها في المنتدى حتى تعم الفائدة على الجميع وللحصول على إجابات أفضل من أعضاء أكثر خبرة.
Weblog
@bitbucket
@xmonader

#2

فى اضافات جديدة من Hackoback

http://programming-fr34ks.net/smf/articles...on-tokyocabinet

(map share people)

فضلا لاتقم بمراسلتي من أجل أسئلة لها أقسامها في المنتدى حتى تعم الفائدة على الجميع وللحصول على إجابات أفضل من أعضاء أكثر خبرة.
Weblog
@bitbucket
@xmonader

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