Aerospike 在默认连接错误之前工作正常 1 - 4 小时
Aerospike works ok for 1 - 4 hours before defaulting to a connection error
我已经使用 Aerospike Node.js 客户端一段时间了,我注意到如果我 运行 服务器超过两个小时,如果我进行连接调用到 Aerospike 数据库,我收到以下错误:
ERROR(23159) [connect.cc:69] [Connect] - Connecting to Cluster Failed
在此之前,执行很顺利,没有任何障碍。我将 Aerospike 与 Express 结合使用来存储和检索用户内容。这是我写的端点之一
app.get("/api/content/:id",function(req,res){
aero.client(aeroSec.generateConfig()).connect(function(err, db){
if(err.code != aero.status.AEROSPIKE_OK) return res.status(403).send();
var options = {};
options.filters = [filter.equal("secindex", req.params.id)];
var query = db.query("ns","posts",options);
var data;
var count = 0;
var s = query.execute();
s.on("data",function(rec){
data = rec;
});
s.on("error",function(err){
data = err;
});
s.on("end",function(){
db.close();
if(data == undefined) res.status(404).send("NOTHING FOUND");
else res.status(200).send(data);
});
});
});
为了全面披露,我没有查询不存在的索引。在 Aerospike 论坛中进行的搜索建议我将 db.close()
注释掉我的端点,这只会减慢问题的速度而不会消除它。当我连接到另一台服务器上托管的 Aerospike 数据库时,错误开始发生,所以我决定查询本地服务器,而不是在正常运行两个小时后发现相同的错误。
有人知道怎么办吗?我真的很喜欢 Aerospike 作为数据库,但如果这些问题仍然存在,我将别无选择,只能转向另一个 NoSQL 数据库。
代码片段显示应用程序创建了与收到的请求数一样多的客户端对象。常见的用法是,创建一个单一的客户端对象,并为与 Aerospike 服务器的所有通信共享。另一个说明是,client.connect()
是一个同步的 API 调用。 node.js 中有一个使用 express 和 Aerospike 的示例 Web 应用程序。这里是link。请参阅此处以获得更多说明。
上面的代码可以这样重构
var aerospike = require('aerospike');
var express = require('express');
var app = express();
var aerospikeConfig = {
// add a node in the cluster.
hosts: [{addr: "192.168.0.1", port: 3000 }]
}
var client = aerospike.client(aerospikeConfig);
// client.connect() is a synchronous API call.
client.connect(function(err, client) {
if(err.code != aerospike.status.AEROSPIKE_OK) {
// application should exit or re-attempt the connect call.
// If connect call fails, connection with Aerospike server is
// is not established. Subsequent aerospike API calls will fail.
return err;
}
});
app.get("/api/content/:id",function(req,res){
var options = {};
options.filters = [filter.equal("secindex", req.params.id)];
var query = client.query("ns","posts",options);
var data;
var count = 0;
var s = query.execute();
s.on("data",function(rec){
data = rec;
});
s.on("error",function(err){
data = err;
});
s.on("end",function(){
client.close();
if(data == undefined) res.status(404).send("NOTHING FOUND");
else res.status(200).send(data);
});
});
谢谢
我已经使用 Aerospike Node.js 客户端一段时间了,我注意到如果我 运行 服务器超过两个小时,如果我进行连接调用到 Aerospike 数据库,我收到以下错误:
ERROR(23159) [connect.cc:69] [Connect] - Connecting to Cluster Failed
在此之前,执行很顺利,没有任何障碍。我将 Aerospike 与 Express 结合使用来存储和检索用户内容。这是我写的端点之一
app.get("/api/content/:id",function(req,res){
aero.client(aeroSec.generateConfig()).connect(function(err, db){
if(err.code != aero.status.AEROSPIKE_OK) return res.status(403).send();
var options = {};
options.filters = [filter.equal("secindex", req.params.id)];
var query = db.query("ns","posts",options);
var data;
var count = 0;
var s = query.execute();
s.on("data",function(rec){
data = rec;
});
s.on("error",function(err){
data = err;
});
s.on("end",function(){
db.close();
if(data == undefined) res.status(404).send("NOTHING FOUND");
else res.status(200).send(data);
});
});
});
为了全面披露,我没有查询不存在的索引。在 Aerospike 论坛中进行的搜索建议我将 db.close()
注释掉我的端点,这只会减慢问题的速度而不会消除它。当我连接到另一台服务器上托管的 Aerospike 数据库时,错误开始发生,所以我决定查询本地服务器,而不是在正常运行两个小时后发现相同的错误。
有人知道怎么办吗?我真的很喜欢 Aerospike 作为数据库,但如果这些问题仍然存在,我将别无选择,只能转向另一个 NoSQL 数据库。
代码片段显示应用程序创建了与收到的请求数一样多的客户端对象。常见的用法是,创建一个单一的客户端对象,并为与 Aerospike 服务器的所有通信共享。另一个说明是,client.connect()
是一个同步的 API 调用。 node.js 中有一个使用 express 和 Aerospike 的示例 Web 应用程序。这里是link。请参阅此处以获得更多说明。
上面的代码可以这样重构
var aerospike = require('aerospike');
var express = require('express');
var app = express();
var aerospikeConfig = {
// add a node in the cluster.
hosts: [{addr: "192.168.0.1", port: 3000 }]
}
var client = aerospike.client(aerospikeConfig);
// client.connect() is a synchronous API call.
client.connect(function(err, client) {
if(err.code != aerospike.status.AEROSPIKE_OK) {
// application should exit or re-attempt the connect call.
// If connect call fails, connection with Aerospike server is
// is not established. Subsequent aerospike API calls will fail.
return err;
}
});
app.get("/api/content/:id",function(req,res){
var options = {};
options.filters = [filter.equal("secindex", req.params.id)];
var query = client.query("ns","posts",options);
var data;
var count = 0;
var s = query.execute();
s.on("data",function(rec){
data = rec;
});
s.on("error",function(err){
data = err;
});
s.on("end",function(){
client.close();
if(data == undefined) res.status(404).send("NOTHING FOUND");
else res.status(200).send(data);
});
});
谢谢