在 C 中将 gwan 与 aerospike db 连接起来

标签 c aerospike g-wan database nosql

你好。

首先,我为我的 ita-english 感到抱歉。

我想将 gwan 与 aerospike 一起使用,但是在运行 servlet 时...问题。 我从 aerospike 的这个 example.c 开始。在文件 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.

在 example.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;
}

如何将 aerospike 与 gwan 连接起来? 谢谢

最佳答案

您需要#pragma link 您的 aerospike 库,并确保所有需要的头文件都在正确的位置。参见 G-WAN FAQ或阅读 G-WAN tarball 中的示例代码。

另外,在G-WAN中main函数的返回码会作为HTTP响应码,所以要避免return -1;

关于在 C 中将 gwan 与 aerospike db 连接起来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28800136/

相关文章:

c - malloc() 是否将分配的数组初始化为零?

c++ - 将字符转换为 C/C++ 中的\use 格式

对以下程序的输出感到困惑

go - 如何使用连接池到 aerospike 服务器

aerospike - 如何在 Aerospike KV 存储中插入 float ?

使用 msi API 更改安装路径

Aerospike 的一致性问题

c - g-wan 更新 servlet

python - 如何在虚拟环境中使用python运行gwan?

轻量级 Web 服务器的 C++ 兼容性