تنفيذ مضمن لـ redis. http://vedis.symisc.net
VEDIS هي مكتبة مخزن بيانات قابلة للتضمين مصنوعة من أكثر من 70 أمرًا مشابهًا في المفهوم لإعادة Redis ولكن بدون طبقة الشبكات منذ أن تم تشغيل VEDIS في نفس العملية من التطبيق المضيف.
على عكس معظم بيانات البيانات الأخرى (أي memcache ، redis) ، لا يوجد لدى VEDIs عملية خادم منفصلة. يقرأ VEDIS ويكتب مباشرة إلى ملفات القرص العادية. توجد قاعدة بيانات كاملة مع مجموعات متعددة ، في ملف قرص واحد. تنسيق ملف قاعدة البيانات هو منصة ، يمكنك نسخ قاعدة بيانات بحرية بين أنظمة 32 بت و 64 بت أو بين البنية الكبيرة والبنية الصغيرة.
VEDIS هي مكتبة C القائمة بذاتها دون تبعية. يتطلب الدعم الأدنى من المكتبات الخارجية أو من نظام التشغيل. هذا يجعله مناسبًا تمامًا للاستخدام في الأجهزة المدمجة التي تفتقر إلى البنية التحتية الدعم لجهاز كمبيوتر سطح المكتب. هذا أيضًا يجعل VEDIs مناسبة للاستخدام في التطبيقات التي تحتاج إلى تشغيل دون تعديل على مجموعة واسعة من أجهزة الكمبيوتر ذات التكوينات المختلفة.
تتمثل المهمة الرئيسية لمحرك مخزن البيانات في تخزين واسترداد السجلات بأسرع وقت ممكن. يدعم VEDIs تخزين البيانات المهيكلة والخام.
يتم تقديم تخزين البيانات المنظم للعملاء عبر واجهة تنفيذ الأوامر (CEI). في الأساس ، تقوم بتنفيذ أمر واحد أو أكثر من أمر ala redis (IE set value ؛ احصل على المفتاح ، hset ...) عبر vedis_exec () وتستخرج نتيجة التنفيذ (قيمة الإرجاع للأمر) عبر vedis_exec_result (). ارجع إلى الصفحة التالية للحصول على قائمة الأوامر المدمجة.
يتم تقديم تخزين البيانات الخام للعملاء عبر واجهات مخزن المفاتيح/القيمة. VEDIS هو متجر مفتاح/قيمة قياسي يشبه Berkeley DB ، وخزانة طوكيو ، و LevelDB ، وما إلى ذلك ، ولكن مع مجموعة ميزة غنية بما في ذلك دعم المعاملات (الحمض) ، والقارئ المتزامن ، إلخ.
تحت متجر KV ، يتم التعامل مع كل من المفاتيح والقيم على أنها صفائف بسيطة من البايتات ، لذلك يمكن أن يكون المحتوى أي شيء من سلاسل ASCII و Binary Blob وحتى ملفات القرص. يتم تقديم طبقة متجر KV للعملاء عبر مجموعة من الواجهات ، وتشمل هذه: vedis_kv_store () ، vedis_kv_append () ، vedis_kv_fetch_callback () ، vedis_kv_append_fmt () ، إلخ.
vedis *pStore; /* Datastore handle */
int rc;
/* Create our datastore */
rc = vedis_open(&pStore,argc > 1 ? argv[ 1 ] /* On-disk DB */ : " :mem: " /* In-mem DB */ );
if ( rc != VEDIS_OK ){ /* Seriously? */ return ; }
/* Execute the simplest command */
rc = vedis_exec(pStore, " SET test 'Hello World' " ,- 1 );
if ( rc != VEDIS_OK ){ /* Handle error */ }
/* Another simple command (Multiple set) */
rc = vedis_exec(pStore, " MSET username james age 27 mail [email protected] " ,- 1 );
if ( rc != VEDIS_OK ){ /* Handle error */ }
/* A quite complex command (Multiple hash set) using foreign data */
rc = vedis_exec_fmt(pStore,
" HMSET config pid %d user %s os %s scm %s " ,
1024 /* pid */ ,
" dean " , /* user */
" FreeBSD " , /* OS */
" Git " /* SCM */
);
if ( rc != VEDIS_OK ){ /* Handle error */ }
/* Fetch some data */
rc = vedis_exec(pStore, " GET test " ,- 1 );
if ( rc != VEDIS_OK ){ /* Seriously? */ }
/* Extract the return value of the last executed command (i.e. 'GET test') " */
vedis_exec_result (pStore,&pResult);
{
const char *zResponse;
/* Cast the vedis object to a string */
zResponse = vedis_value_to_string (pResult, 0 );
/* Output */
printf ( " test ==> %s n " ,zResponse); /* test ==> 'Hello world' */
}
vedis_exec (pStore, " GET mail " ,- 1 );
/* 'GET mail' return value */
vedis_exec_result (pStore,&pResult);
{
const char *zResponse;
/* Cast the vedis object to a string */
zResponse = vedis_value_to_string (pResult, 0 );
/* Output */
printf ( " mail ==> %s n " ,zResponse); /* Should be '[email protected]' */
}
/*
* A command which return multiple value in array.
*/
vedis_exec (pStore, " MGET username age " ,- 1 ); /* james 27 */
vedis_exec_result (pStore,&pResult);
if ( vedis_value_is_array(pResult) ){
/* Iterate over the elements of the returned array */
vedis_value *pEntry;
puts ( " Array entries: " );
while ((pEntry = vedis_array_next_elem (pResult)) != 0 ){
const char *zEntry;
/* Cast to string and output */
zEntry = vedis_value_to_string (pEntry, 0 );
/* Output */
printf ( " t %s n " ,zEntry);
}
}
/* Extract hashtable data */
vedis_exec (pStore, " HGET config pid " ,- 1 ); /* 1024 */
vedis_exec_result (pStore,&pResult);
{
int pid;
/* Cast to integer */
pid = vedis_value_to_int (pResult);
/* Output */
printf ( " pid ==> %d n " ,pid); /* Should be 1024 */
}
/* Finally, auto-commit the transaction and close our datastore */
vedis_close (pStore);تفضل بزيارة http://vedis.symisc.net