连接gwan和C中的aerospike db

连接gwan和C中的aerospike db,c,aerospike,g-wan,database,nosql,C,Aerospike,G Wan,Database,Nosql,你好 首先,我为我的ita英语感到抱歉 我想在aerospike中使用gwan,但在运行servlet时…出现了问题。 我从这个例子开始。c的aerospike。在example.c文件中,我放入gwan.h,这是输出。/gwan: loading hello.cs: to use .cs scripts, install C#.. hello.lua: to use .lua scripts, install Lua ~~~~~~~~~~~~~~~~~~~~

你好

首先,我为我的ita英语感到抱歉

我想在aerospike中使用gwan,但在运行servlet时…出现了问题。 我从这个例子开始。c的aerospike。在example.c文件中,我放入gwan.h,这是输出。/gwan:

loading
        hello.cs: to use   .cs scripts, install C#..
       hello.lua: to use  .lua scripts, install Lua
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Linking example.c: undefined symbol: g_namespace
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

To run G-WAN, you must fix the error(s) or remove this Servlet.

内例c:

#include "gwan.h"
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
#include <stdlib.h>

#include <aerospike/aerospike.h>
#include <aerospike/aerospike_key.h>
#include <aerospike/aerospike_query.h>
#include <aerospike/as_error.h>
#include <aerospike/as_key.h>
#include <aerospike/as_query.h>
#include <aerospike/as_record.h>
#include <aerospike/as_status.h>
#include <aerospike/as_val.h>
#include "example_utils.h"
const char TEST_INDEX_NAME[] = "test-bin-index";
bool query_cb(const as_val* p_val, void* udata);
void cleanup(aerospike* p_as);
bool insert_records(aerospike* p_as);
int
main(int argc, char* argv[])
{
if (! example_get_opts(argc, argv, EXAMPLE_MULTI_KEY_OPTS)) {
    exit(-1);
}
aerospike as;
example_connect_to_aerospike(&as);
example_remove_test_records(&as);
example_remove_index(&as, TEST_INDEX_NAME);
if (! example_create_integer_index(&as, "test-bin", TEST_INDEX_NAME))
{   
    cleanup(&as);
    exit(-1);
}
if (! insert_records(&as)) {
    cleanup(&as);
    exit(-1);
}
if (! example_read_test_records(&as)) {
    cleanup(&as);
    exit(-1);
}
as_error err;
as_query query;
as_query_init(&query, g_namespace, g_set);
as_query_where_inita(&query, 1);
as_query_where(&query, "test-bin", as_integer_equals(7));
LOG("executing query: where test-bin = 7");
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);
}
LOG("query executed");
as_query_destroy(&query);
cleanup(&as);
LOG("simple query example successfully completed");
return 0;
}
bool
query_cb(const as_val* p_val, void* udata)
{
if (! p_val) {
    LOG("query callback returned null - query is complete");
    return true;
}
as_record* p_rec = as_record_fromval(p_val);
if (! p_rec) {
    LOG("query callback returned non-as_record object");
    return true;
}
LOG("query callback returned record:");
example_dump_record(p_rec);
return true;
}
void
cleanup(aerospike* p_as)
{
example_remove_test_records(p_as);
example_remove_index(p_as, TEST_INDEX_NAME);
example_cleanup(p_as);
}
bool
insert_records(aerospike* p_as)
{
set
as_record rec;
as_record_inita(&rec, 1);
for (uint32_t i = 0; i < g_n_keys; i++) {
    as_error err;
    as_key key;
    as_key_init_int64(&key, g_namespace, g_set, (int64_t)i);
    as_record_set_int64(&rec, "test-bin", (int64_t)i);
    if (aerospike_key_put(p_as, &err, NULL, &key, &rec) !=     AEROSPIKE_OK) {
        LOG("aerospike_key_put() returned %d - %s", err.code, err.message);
        return false;
    }
}

LOG("insert succeeded");

return true;
}
#包括“gwan.h”
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括“示例_utils.h”
const char TEST_INDEX_NAME[]=“TEST bin INDEX”;
布尔查询(const as_val*p_val,void*udata);
空洞清理(aerospike*p_as);
bool insert_记录(aerospike*p_as);
int
main(int argc,char*argv[])
{
如果(!示例获取选项(argc、argv、示例多键选项)){
出口(-1);
}
aerospike as;
示例\u连接\u至\u aerospike(&as);
示例删除测试记录(&A);
示例\u删除\u索引(&as,测试\u索引\u名称);
如果(!示例创建整数索引(&as,“测试箱”,测试索引名称))
{   
清理(&as);
出口(-1);
}
如果(!插入_记录(&as)){
清理(&as);
出口(-1);
}
如果(!示例\读取\测试\记录(&as)){
清理(&as);
出口(-1);
}
作为错误;
as_查询;
as_query_init(&query,g_名称空间,g_集);
as_query_其中_inita(&query,1);
as_query_其中(&query,“test bin”,as_integer_等于(7));
日志(“执行查询:其中test bin=7”);
if(aerospike\u query\u foreach(&as,&err,NULL,&query,query\u cb,NULL)
!=AEROSPIKE(正常){
日志(“aerospike\u query\u foreach()返回%d-%s”,错误代码,
错误消息);
as\u查询\u销毁(&query);
清理(&as);
出口(-1);
}
日志(“执行查询”);
as\u查询\u销毁(&query);
清理(&as);
日志(“简单查询示例成功完成”);
返回0;
}
布尔
查询\u cb(常量为\u val*p\u val,无效*udata)
{
如果(!p_val){
日志(“查询回调返回空-查询完成”);
返回true;
}
as_record*p_rec=as_record_fromval(p_val);
如果(!p_rec){
日志(“查询回调返回的非as_记录对象”);
返回true;
}
日志(“查询回调返回的记录:”);
示例转储记录(p记录);
返回true;
}
无效的
清理(aerospike*p_as)
{
示例删除测试记录(p_as);
示例移除索引(p\u as,TEST\u index\u NAME);
示例_清理(p_as);
}
布尔
插入_记录(aerospike*p_as)
{
设置
as_record rec;
作为初始记录(&rec,1);
对于(uint32_t i=0;i
如何将aerospike与gwan连接? 谢谢

您需要
#pragma链接
您的aerospike库,并确保所有必需的头文件都位于正确的位置。请参阅或阅读G-WAN tarball中的示例代码

此外,在G-WAN中,主函数的返回码将用作HTTP响应码,因此避免
return-1

未定义的符号:g_名称空间

错误信息很清楚。只要这个变量未定义,您的C servlet就不会编译


我不知道您的库,但这个变量可能是在库包含文件中定义的,或者必须由最终用户(您)定义。查看库文档。

使用G-WAN运行Aerospike C-client示例的详细步骤

  • 在您的系统上下载并提取G-WAN服务器tar
  • 您可以使用解压缩文件夹中的
    /gwan
    脚本启动G-WAN服务器,例如
    /gwan\u linux64位/
  • 从获取Aerospike C-client,并将其安装到您的系统上
  • 将example.c复制到
    /gwan_linux64位/0.0.0.0_8080/#0.0.0.0/csp/
  • 对example.c进行以下更改

    • 添加以下#pragma指令,
      #pragma include”/home/user/aerospeck-client-c/examples/utils/src/include/“

      这将有助于搜索
      example_utils.h
      ,这是C-client中所有示例脚本所必需的
    • 添加以下#pragma指令,
      #pragma link”/home/user/aerospeck-client-c/examples/utils/src/main/example\u utils.c“

      我们必须链接example_utils.c,因为它定义了示例脚本中使用的所有util函数
  • 对返回值进行更改。重新运行正确的HTTP错误代码

  • 现在,你可以走了。运行
    /gwan
    服务器并通过浏览器访问您的Web服务


  • 我这样做:#pragma link“/usr/lib/libaerospeck.so”#包括“aerospeck/aerospeck.h”#包括“aerospeck/aerospeck_key.h”,但现在说:“Linking prova.c/usr/lib/libaerospeck.so未定义的符号:RAND_seed”。在这一点上,广域网不再是你面对的墙。看起来你仍然错过了一些aerospike头球。我试图在我的系统上安装aerospike,但他们似乎只提供64位软件包……我确保所有东西都是64位的,我的系统(debian7.8 64位)、aerospike、gwan和aerospike的客户端c。在这一点上,我不知道该做什么。您是否尝试编译原始示例代码?有没有关于编译它的特别说明?你可以从那里开始。有人告诉我:ld行的以下标志:LDFLAGS=-lssl-lcrypto-lpthreadifneq($(OS),Darwin)LDFLAGS+=-lrt-ldl endif,在makefile中?如果这个gwan在没有make文件的情况下运行编译…对吗?欢迎。如果你在这方面遇到任何问题,请随时打扰我。