标签: nosql

我如何在nedb中有自动递增字段?

我想要像关系数据库或目标数据库那样具有完全自动递增的字段,因此我需要一个_id具有自动设置的字段值的整数字段,值应该是这样的最后一个记录_id值:

数据:

{_id:1,name"foo"}
{_id:2,name"bar"}
Run Code Online (Sandbox Code Playgroud)

删除最后一条记录:

{_id:1,name"foo"}
Run Code Online (Sandbox Code Playgroud)

添加新记录:

{_id:1,name"foo"}
{_id:3,name"newbar"}
Run Code Online (Sandbox Code Playgroud)

我向数据存储区添加了一个函数,并计算_id的最大值和加1 max(_id)+1并设置为字段值,但是这里存在问题:

当我们在关系数据库中使用自动增量字段时,它的工作方式与我说的一样,并且在您remove last record保留了已删除的记录号并且新插入的记录继续增加之后,但以我的方式,它说新记录的已删除记录的_id。

我的代码是:

var Datastore = require('nedb'),
localDb = new Datastore({
    filename: __dirname + '/dbFilePath.db',
    autoload: true
});

localDb.getMax = function(fieldName, onFind){
   db.find({}).sort({_id:-1}).limit(1).exec(function (err, docs) {onFind && onFind(err, docs['_id']);});
   return localDb;
}

localDb.insertAutoId = function(data, onAdd){
    var newIndex = 0;
    localDb.getMax(function (err, maxValue) {
        newIndex = maxValue+1;

        if(!data["_id"])
            data["_id"] = newIndex;

        localDb.insert(data, function (err, newDoc) {
            onAdd && onAdd(err, newDoc);
        }); …
Run Code Online (Sandbox Code Playgroud)

nosql node.js nedb

2
推荐指数
1
解决办法
2629
查看次数

Cassandra轻量级交易性能惩罚

我有两个cassandra表,一个记录表和一个计数器表.计数器表为记录表中的每种记录保留一个计数器.

当我将新记录插入记录表时,我将同时更新计数器表.但新记录可能已经在记录表中.可以两次插入相同的记录,但之后我会将计数器添加两次,这是不正确的.

我现在有两个解决方案.

  1. 使用新记录键从cassandra获取记录.如果它不为null,我将不会插入记录并增加计数器.

  2. 使用轻量级事务让cassandra检查记录是否已存在.

解决方案2将使插入"原子",但文档说它会有性能损失.在解决方案1中,我发送了2个查询,这也将导致性能下降.

目前我正在使用解决方案1.我是cassandra轻量级事务的新手,所以我不知道原子性的成本.有谁知道哪种解决方案更好?

performance consistency cassandra nosql

2
推荐指数
1
解决办法
1231
查看次数

如何使用Google数据存储区(在javascript中)创建架构?

我正在编写一个使用Google Datastore的Nodejs应用程序.我只想知道如何使用google数据存储区为身份验证过程设置架构.基本上,我如何使用Google Datastore 执行以下代码:

var mongoose = require('mongoose');
var bcrypt   = require('bcrypt-nodejs');

var userSchema = mongoose.Schema({

local            : {
    email        : String,
    password     : String,
}

});

// generating a hash
userSchema.methods.generateHash = function(password) {
return bcrypt.hashSync(password, bcrypt.genSaltSync(8), null);
};

// checking if password is valid
userSchema.methods.validPassword = function(password) {
return bcrypt.compareSync(password, this.local.password);
};

// create the model for users and expose it to our app
module.exports = mongoose.model('User', userSchema);
Run Code Online (Sandbox Code Playgroud)

我刚刚开始使用Nodejs和Google Datastore,所以如果这个问题看起来很基本,我很抱歉.

google-app-engine nosql node.js express google-cloud-datastore

2
推荐指数
1
解决办法
812
查看次数

如何在dynamoDB中连接表?

我知道DynamoDB不支持连接表,但这是我的用例:

(使用类似示例隐藏确切的详细信息,而不是发布作业问题)

我有四张桌子

Person ( unique_id(hash key), Name(range key), Age, Gender)<br>
UIDtoSIDTable ( uid(hash key) , sid)<br>
SIDtoStudentID(sid(hash key), studentID, other attributes)<br>
StudentDetails(studentID(hash key), schoolName, Grades)
Run Code Online (Sandbox Code Playgroud)

我正在使用dynamodbmapper.

我的应用程序需要在表格中显示以下数据:

unique_id, Name, Age (from Person table)
sid 
SchoolName, Grades (from studentDetails table)
Run Code Online (Sandbox Code Playgroud)

现在我的实施是:

  1. 扫描uidtosidTable为列表中的所有uid-sid对说list1
  2. 对于list1中的每个sid,从SIDtoStudentID表中查询studentID
  3. 对于来自Person表的每个uid查询,以及每个studentID从StudentDetails表中获取数据

这个实现的问题是需要很长时间才能完成,超过5分钟就能完成1000个项目.

如果它是一个关系数据库,我会加入这四个表,并获得所需的数据.

如何实现这一点是有效的动力学?

java amazon-web-services nosql amazon-dynamodb

2
推荐指数
1
解决办法
5347
查看次数

亚马逊dynamodb记录大小限制变通

我正在开发一个应用程序,该程序将人们回答的问题存储在nosql数据库中。我正在使用AWS dynamodb,但记录大小限制为400 kb。我将如何存储400kb以上的数据。最好在当前记录中引用下一个记录吗?如果有人有其他想法或想法,那将是很好的。

amazon-web-services nosql amazon-dynamodb

2
推荐指数
1
解决办法
3061
查看次数

在Firebase中执行扇出数据的事务

我正在创建一个社交网络式的Feed,并且一直在关注Firebase博客上的指南,在整个数据库中散布我的"博客帖子".

这很有意义,适用于使用update()方法与这些帖子进行交互.但是,我不清楚如何在多个地方以原子方式执行交易.

例如,我想添加"喜欢"帖子的功能.如果我要在一个位置发布该帖子,我的代码将如下所示:

var postRef = firebaseDB.ref("posts/" + postID + "/likes");
postRef.transaction(function(likes) {
    return (likes || 0) + 1;
});
Run Code Online (Sandbox Code Playgroud)

出于显而易见的原因,以下解决方案不是原子的.

var postRef1 = firebaseDB.ref("posts/" + postID + "/likes");
postRef1.transaction(function(likes) {
    return (likes || 0) + 1;
});

var postRef2 = firebaseDB.ref("user/" + userID + "/posts/" + postID + "/likes");
postRef2.transaction(function(likes) {
    return (likes || 0) + 1;
});
Run Code Online (Sandbox Code Playgroud)

由于交易在ref上运行,我如何能够原子地"喜欢"多个地方的帖子?

nosql firebase firebase-realtime-database

2
推荐指数
1
解决办法
306
查看次数

使用Riak CRDT和bitcask后端

我在配置CRDT桶类型和使用bitcask后端时遇到问题.我希望能够使用set类型并保持bitcask的到期功能.

如果我没有指定后端,我可以创建和使用桶类型

sudo riak-admin bucket-type create sets '{"props":{"datatype":"set"}}'
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试在道具中指定后端,每当我尝试使用该类型时,riak似乎崩溃了,我失去了联系.

sudo riak-admin bucket-type create sets2 '{"props":{"datatype":"set","backend":"bitcask"}}'
Run Code Online (Sandbox Code Playgroud)

以下是我尝试使用存储桶类型时error.log中的唯一日志.如果它有帮助我也尝试指定后端是leveldb和内存以及bitcask没有运气.

2016-10-13 13:41:25.965 [错误] <0.8870.0> gen_fsm <0.8870.0>状态有效终止,原因是:在riak_core_vnode中没有匹配{riak_kv_multi_backend,undefined_backend,<<"bitcask">>}的case子句:vnode_command/3 line 346 2016-10-13 13:41:25.965 [error] <0.8870.0> CRASH REPORT进程<0.8870.0>退出1个邻居,原因是:没有case子句匹配{riak_kv_multi_backend,undefined_backend,<< riak_core_vnode中的"bitcask">>}:gen_fsm中的vnode_command/3行346:终止/ 7行622 2016-10-13 13:41:25.965 [错误] <0.168.0>主管riak_core_vnode_sup以{riak_core_vnode开头的子项未定义start_link,undefined} at <0.8870.0>退出,原因是没有case子句匹配riak_core_vnode中的{riak_kv_multi_backend,undefined_backend,<<"bitcask">>}:vnode_command/3 line 346 in context child_terminated 2016-10-13 13:41: 25.965 [错误] <0.8896.0> gen_fsm <0.8896.0>处于状态就绪已终止,原因是:没有case子句匹配{riak_kv_multi_backend,undefined_backend,<<"bitcask" >>} in riak_core_vnode:vnode_command/3 line 346 2016-10-13 13:41:25.965 [error] <0.8896.0> CRASH REPORT进程<0.8896.0>退出10个邻居,原因是:没有case子句匹配{riak_kv_multi_backend ,undefined_backend,<<"bitcask">>} in riak_core_vnode:vnode_command/3 line 346 in gen_fsm:terminate/7 line 622 2016-10-13 13:41:25.966 [error] <0.8897.0> Supervisor {<0.8897. 0>,poolboy_sup}让孩子riak_core_vnode_worker以riak_core_vnode_worker:start_link([{worker_module,riak_core_vnode_worker},{worker_args,[1370157784997721485815954530671515330927436759040,...]},...])在未定义的出口处启动,原因是没有case子句匹配{riak_kv_multi_backend, undefined_backend,<<"bitcask">>}在riak_core_vnode中:vnode_command/3行346在上下文中shutdown_error 2016-10-13 13:41:25.966 …

erlang nosql riak crdt

2
推荐指数
1
解决办法
156
查看次数

使用Mongo C#2.0驱动程序替换嵌入式文档

我有一个包含嵌入式单元阵列的文档,如下所示:

{
    "_id" : ObjectId("5807c22e959ca231f0c48a75"),
    "Code" : "Value",
    "Units" : [ 
        {
            "_id" : ObjectId("5807cc08959ca331f09c530e"),
            "Code" : "Foo",
            "Label" : "Foo"
        },
        {
            "_id" : ObjectId("5807cc08959ca331f09c530e"),
            "Code" : "Bar",
            "Label" : "Bar"
        },
    ]
}
Run Code Online (Sandbox Code Playgroud)

我想通过其ID查找一个单位,并将其替换为新文档。我如何使用Mongo C#Driver 2.0做到这一点?

提前致谢!

c# mongodb nosql

2
推荐指数
1
解决办法
745
查看次数

有没有一种方法可以在两个pouchdb实例之间进行同步?

我正在尝试构建一个包含以下内容的拓扑:

  • 通过局域网连接的两个桌面运行本机应用程序。

  • 同一应用的网络版本。

台式机只能间歇性地连接到Internet,因此本机应用程序和Web应用程序都需要具有单独的数据存储,这些数据存储在联机时会同步。

为此,我发现了ouchdb,它似乎是理想的候选人。我正在Electron上构建桌面应用程序,因此我考虑与其一起使用pouchdb并在联机时将其与服务器服务器上的couchdb同步。

但是问题是,这两个运行带有pouchdb的Electron应用程序的台式机将需要通过LAN彼此同步。pouchdb是否提供与远程pouchdb同步的功能?我只看到同步袋和沙发的文档。

https://pouchdb.com/guides/databases.html

我真的是数据库之间同步的概念的新手。Dunno,如果我要提出明显的(或显然不可能的)问题。感谢帮助。

couchdb nosql pouchdb

2
推荐指数
1
解决办法
762
查看次数

Cassandra:具有条件的批处理不能跨越多个表

我试图通过使用Cassandra cpp-driver对批处理内的不同表执行3个条件插入:

BEGIN BATCH 
insert into table1 values (...) IF NOT EXISTS 
insert into table2 values (...) IF NOT EXISTS 
insert into table3 values (...) IF NOT EXISTS 
APPLY BATCH
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误:

Batch with conditions cannot span multiple tables
Run Code Online (Sandbox Code Playgroud)

如果在Cassandra中无法实现上述目标,那么将多个条件插入作为事务执行并确保所有成功或全部失败的替代方法是什么?

batch-processing cassandra nosql datastax cassandra-3.0

2
推荐指数
1
解决办法
1911
查看次数