AerospikeC¿Í»§¶ËÊÖ²á¨D¨D¨D²éѯ¨D²éѯ¼Ç¼

2015-07-24 08:32:30 ¡¤ ×÷Õß: ¡¤ ä¯ÀÀ: 0

²éѯ¼Ç¼

²éѯʱ³ýÁËʹÓÃÖ÷Ë÷Òý£¬Aerospike C¿Í»§¶ËÒ²ÌṩAPIÀ´Í¨¹ý¼ìË÷´ÎË÷Òý²éѯ Êý¾Ý¿â¡£
ΪÁËʹÓôÎË÷Òý²éѯÊý¾Ý£¬Ê×ÏÈÓ¦³õʼ»¯²¢Ìî³äÒ»¸öas_query¶ÔÏó£»È»ºó£¬ÒÔ³õʼ»¯Íê³ÉµÄas_query¶ÔÏó£¬Ê¹ÓÃaerospike_query_foreach()Ö´Ðвéѯ¡£Ò»¸ö²éѯ¿ÉÒÔ£º
¶Ô·µ»ØµÄÂú×ãÌõ¼þ¼Ç¼Öð¸öµ÷Óûص÷º¯Êý¡£
¶Ô·µ»ØµÄÂú×ãÌõ¼þ¼Ç¼¼¯ºÏÓ¦ÓÃÁ÷ʽÓû§¶¨Ò庯Êý£¨StreamUDF£©£¬ÔÙ¶ÔStreamUDF·µ»Ø½á¹ûµ÷Óûص÷Óú¯Êý¡£

´ËÕ½ÚרעÓÚµÚÒ»ÖÖ·½Ê½£¬ÈçÏëÁ˽âµÚ¶þÖÖ·½Ê½£¬Çë²Î¼û¡¾¾ÛºÏ¡¿Õ½ڡ£

ºóÃæµÄ´úÂëÒýÓÃ×ÔʾÀýĿ¼¡¾examples/query_examples/simple¡¿£¬ÓÉAerospike C¿Í»§¶Ë°²×°°ü×Ô´ø¡£

?

¶¨Òå²éѯ

Ê×ÏÈ£¬³õʼ»¯ºÍ¹¹½¨Ò»¸öµÄ²éѯ¶ÔÏó¡£ÏÂÃæ´úÂëÆ¬¶Ï³õʼ»¯ÁËÒ»¸ö²éѯ¶ÔÏó£¬Òª²éÕÒµÄÊý¾ÝËùÔÚµÄnamespaceÃû³ÆÎª¡°test¡±¡¢setÃû³ÆÎª¡°demoset¡±£¬²éÕÒbinÃûÊÇ "test-bin"ÇÒÕûÐÍÖµµÈÓÚ7µÄ¼Ç¼¡£Ï൱ÓÚSQLÓï¾ä£º¡°select * from test.demoset where test-bin equal 7¡±¡£

as_query query;
as_query_init(&query, "test", "demoset");

as_query_where_inita(&query, 1);
as_query_where(&query, "test-bin", integer_equals(7));

×¢Ò⣺²»´ø¡°where"Óï¾äµÄ²éѯ½«µ¼ÖÂÈ«¿âɨÃè¡£

µ÷Óòéѯ

²éѯʹÓÃaerospike_query_foreach()º¯Êýµ÷Óá£

´Ëµ÷ÓÃΪ¼¯ÈºÖÐÿ¸ö½Úµã³õʼ»¯Ò»¸ö²éѯÈÎÎñ¡£ÔÚC¿Í»§¶ËÄÚ²¿£¬ÓÐ5¸ö£¨NUM_QUERY_THREADS£©²éѯ¹¤×÷Ï̴߳¦ÀíËùÓнڵãµÄ²éѯÈÎÎñ¡£Èô¼¯Èº¶àÓÚ5¸ö½Úµã£¬ÀíÏë״̬ÏÂÊÇÔö¼ÓĬÈϵĴ¦ÀíÏß³ÌÊý£¬ÒÔ±ãÈÃÈ«²¿½Úµã²¢Ðд¦Àí¡£

if (aerospike_query_foreach(&as, &err, NULL, &query, query_cb, NULL) != AEROSPIKE_OK) { LOG("aerospike_query_foreach() returned %d - %s", err.code, err.message); as_query_destroy(&query); cleanup(&as); exit(-1); }

ÈôÔÚÖ¸¶¨µÄ²éѯĿ±êÉÏûÓд´½¨´ÎË÷Òý£¬½«·µ»Ø¡±AEROSPIKE_ERR_INDEX_NOT_FOUND¡°´íÎó¡£ÈôÒ»¸öË÷ÒýÕýÔÚ´´½¨ÖУ¬½«·µ»ØAEROSPIKE_ERR_INDEX_NOT_READABLE´íÎó¡£

´¦Àí½á¹û

ÉÏÃæµÄʾÀýÖУ¬aerospike_query_foreach()º¯ÊýʹÓÃÁËÒ»¸ö»Øµ÷º¯Êýquery_cd×öΪ²ÎÊý¡£»Øµ÷º¯Êý¾ßÓÐÈçÏÂÐ͹¹£º

typedef bool (*aerospike_query_foreach_callback)(const as_val *value, void *udata);

¶ÔÈκνڵ㷵»ØµÄÿÌõ¼Ç¼£¬»Øµ÷º¯Êý¶¼±»µ÷Æð£¬À´¶Ô¼Ç¼½øÐд¦Àí¡£¼Ç¼´¦ÀíûÓÐÌØ¶¨Ë³Ðò¡£Äã¿ÉÄÜ×¢Òâµ½²ÎÊývalueÊǸöconst as_val *ÀàÐÍ£¬Òâζׯص÷º¯ÊýûÓÐÔðÈÎÏú»ÙËü£¬ËüÔڻص÷º¯ÊýµÄ×÷ÓÃÓòÄڿɼû¡£»Øµ÷º¯Êý²»Ó¦½«Ëü´«µÝµ½×÷ÓÃÓòÖ®Íâ¡£

ûÓиü¶àÐè´¦ÀíµÄ·µ»Ø½á¹ûʱ£¬½«ÒÔ¿ÕÖµ£¨NULL£©×öΪ²ÎÊývalueµÄÖµ£¬µ÷Óûص÷Óú¯Êý¡£

µ±²ÎÊývalueÆÚÍûÊÇÒ»¸ö¼Ç¼ʱ£¬¿É¼òµ¥µØÊ¹ÓÃas_record_formval()ת»»³É¼Ç¼ÀàÐÍ¡£Èô²ÎÊývalueÊǸö¼Ç¼£¬´Ëº¯Êý·µ»ØÒ»¸ö¼Ç¼¶ÔÏó£»·ñÔò·µ»Ø¿ÕÖµ¡£Ò²¿ÉʹÓÃas_val_type()¼ì²évalueµÄÀàÐÍ¡£

bool callback(const as_val *value, void *udata) { if (value == NULL) { // query is complete return true; } as_record *rec = as_record_fromval(value); if (rec != NULL) { // process record } return true; }

ÈôÏëÔÚÿ´Î»Øµ÷ʱ´«µÝÒ»¸öÈ«¾Ö¶ÔÏó³öÀ´£¬ÇëÔÚµ÷ÓÃaerospike_query_foreach()ʱÌṩһ¸öuserdataÀàÐ͵IJÎÊý¡£

ÇåÀí×ÊÔ´

Ò»µ©²éѯ½áÊø£¬²éѯ¶ÔÏóÓëÆä³ÉÔ±¶ÔÏó¿ÉʹÓÃas_query_destroy()º¯Êý°²È«µØÊÍ·Å¡£×¢ÒâÔÚÎÒÃǵÄʾÀýÖУ¬¿ÉÒÔ²»ÓÃÏÔʽµ÷ÓÃas_query_destroy()£¬ÒòΪÊÇ´ÓÕ»ÉÏ·ÖÅäµÄas_query¶ÔÏ󣬲¢ÇÒʹÓÃÁËas_query_where_inita()£¬À´±ÜÃâÄÚ²¿Ê¹Óöѡ£