我正在尝试从RethinkDB文档中删除密钥.我的方法(没有用):
r.db('db').table('user').replace(function(row){delete row["key"]; return row})
Run Code Online (Sandbox Code Playgroud)
其他方法:
r.db('db').table('user').update({key: null})
Run Code Online (Sandbox Code Playgroud)
这个只设置row.key = null(看起来合理).
通过Web UI 在rethinkdb数据资源管理器上测试的示例.
这是我在这里的官方第一个问题; 我欢迎任何/所有批评我的帖子,以便我可以学习如何成为一个更好的SO公民.
我正在审查非关系型DBMS,用于存储潜在的大型电子邮件退出列表,使用各自的Python客户端库,倾向于使用MongoDB或RethinkDB.我的应用程序的痛点是批量插入性能,因此我设置了两个Python脚本,将批量为5,000的20,000条记录插入到MongoDB和RethinkDB集合中.
MongoDB python脚本mongo_insert_test.py:
NUM_LINES = 20000
BATCH_SIZE = 5000
def insert_records():
collection = mongo.recips
i = 0
batch_counter = 0
batch = []
while i <= NUM_LINES:
i += 1
recip = {
'address': "test%d@test%d.com" % (i, i)
}
if batch_counter <= BATCH_SIZE:
batch.append(recip)
batch_counter += 1
if (batch_counter == BATCH_SIZE) or i == NUM_LINES:
collection.insert(batch)
batch_counter = 0
batch = []
if __name__ == '__main__':
insert_records()
Run Code Online (Sandbox Code Playgroud)
几乎相同的RethinkDB python脚本rethink_insert_test.py:
NUM_LINES = 20000
BATCH_SIZE = 5000
def insert_records():
i …
Run Code Online (Sandbox Code Playgroud) 我知道我可以做的一种方式是通过列出通过dbList()
和tableList()
再想找我想要的结果.
有没有更简单的方法?
编辑
我的目标是创建一个表,以防它不存在.
我正在开发一个分布式的应用程序,我有一个必须在分布式服务器之间共享的SQLite数据库.如果我在serverA中,并且更改sqlite行,则此更改必须立即在其他服务器中,但如果服务器处于脱机状态,然后它在线,则必须更新所有信息等于其他服务器.
我正在尝试使用小型SQLite数据库开发HA服务.
我正在考虑像MongoDB或ReThinkDB这样的东西,因为复制工作正常,我有独立的服务器在线数据.
有一个库或其他SQL方法在服务器之间共享数据?
提前致谢.
sqlite replication high-availability distributed-computing rethinkdb
我有这个对象:
{
"id": "eb533cd0-fef1-48bf-9fb8-b66261c9171b" ,
"errors": [
"error1" ,
"error2"
]
}
Run Code Online (Sandbox Code Playgroud)
我只想在错误数组中添加一个新错误.我试过了:
r.db('test').table('taskQueue').get("eb533cd0-fef1-48bf-9fb8-b66261c9171b").update({'errors': r.row['errors'].append('appended error')})
Run Code Online (Sandbox Code Playgroud)
但这没用.它给出了这个错误:"TypeError:r.row.errors未定义"
我的问题是如何追加数组?
刚到Elixir/Phoenix我想使用RethinkDB而不是PostgreSQL,但我只在PostgreSQL上找到文档/示例(它似乎是默认/官方数据库).Hamiltop(Rethinkdb-elixir)提供了一个非常好的软件包,但遗憾的是Wiki中的文档还没有准备就绪,而自述文件对我来说还不够.我绝对不想使用SQL(我来自使用Meteor/MongoDB,其中数据库不是问题).谁能告诉我一个我需要的代码的简单示例:
这可能听起来很傻但是Meteor为我们照顾这些,现在这对我来说是一个问题...因为我无法正确地做到这一点.谢谢!
如何在RethinkDB中创建唯一项?
在MongoDb中我使用ensureIndex
了这个,例如:
userCollection.ensureIndex({email:1},{unique:true},function(err, indexName){
Run Code Online (Sandbox Code Playgroud) 目前我正在使用没有RethinkDB的socket.io,如下所示:
客户端向socket.io发出事件,socket.io接收事件,发送到各种其他客户端,并保存到数据库以保持持久性.新的客户端连接将从db获取现有数据,然后通过socket.io监听新事件.
如何切换到RethinkDB和更改源在这里帮助我?
我看到同样使用RethinkDB的方式是客户端可以执行POST(插入RethinkDB)而不是发送到socket.io,然后socket.io正在观看RethinkDB更改并在接收到新数据时向所有客户端发送.
这种方法如何比我当前的方法更好地使用RethinkDB和changefeed?对我来说,他们都觉得他们完成了同样的事情,但是我没有看到RethinkDB方法有任何明显的优势,因为我要去db而不是直接从服务器上的socket.io发出它会肯定会慢一点.
我有一个调查表,看起来像这样:
{
id: Id,
date: Date,
clients: [{
client_id: Id,
contacts: [{
contact_id: Id,
score: Number,
feedback: String,
email: String
}]
}]
}
Run Code Online (Sandbox Code Playgroud)
我需要更新特定联系人下的字段score
和feedback
字段.目前,我正在运行这样的更新:
function saveScore(obj){
var dfd = q.defer();
var survey = surveys.get(obj.survey_id);
survey
.pluck({ clients: 'contacts' })
.run()
.then(results => {
results.clients.forEach((item, outerIndex) => {
item.contacts.forEach((item, index, array) => {
if(Number(item.contact_id) === Number(obj.contact_id)) {
array[index].score = obj.score;
console.log(outerIndex, index);
}
});
});
return survey.update(results).run()
})
.then(results => dfd.resolve(results))
.catch(err => dfd.resolve(err));
return dfd.promise;
}; …
Run Code Online (Sandbox Code Playgroud) 这更像是"内部运作"未定问题:
noSQL数据库如何不支持*A*CID(意味着它们无法在单个事务中更新/插入然后回滚多个对象的数据) - 更新二级索引?
我的理解是 - 为了使二级索引保持同步(否则它将变得陈旧) - 这必须在同一事务中发生.
此外,如果索引可能驻留在与数据不同的主机上 - 那么需要存在分布式锁和/或两阶段提交以使这种更新原子地工作.
但是,如果这些数据库不支持多对象事务(这意味着它们不对多个主机上的数据进行两阶段提交),它们使用什么方法来保证驻留在B树结构中的二级索引与数据不陈旧?
rethinkdb ×10
mongodb ×2
acid ×1
database ×1
ecto ×1
elixir ×1
indexing ×1
javascript ×1
node.js ×1
nosql ×1
python ×1
python-2.7 ×1
replication ×1
socket.io ×1
sqlite ×1
transactions ×1