我知道redis很快,我发现只使用redis就可以实现很多东西.但是以牺牲多个查询为代价.在我使用Mongo时,我可能有一个模型/架构,如:
聊天室(Mongo)
有了redis,我需要更复杂的东西
chatrooms:<<id>> 其中id需要手动生成
chatrooms:<<id>>:users 存储用户集要检索mongo的聊天室详细信息很简单,使用mongo我需要在这种情况下产生2个查询.在更复杂的用例中,可能更多
所以我从性能的角度来看,哪个更高效?从开发的角度来看,肯定是以简单的Mongo为例.
我有一个空的RethinkDB表中的文档,numbers下面包含嵌套对象.我在内部对象内的一对数字上创建了一个二级索引,一个复合索引和一个多索引.复合因为我想使用2元素数组作为辅助索引,因为同一个2对可能对应多个文档.
在这里,我创建了该二级索引并在Data Explorer浏览器视图中插入了一些文档:
r.db('test')
.table('numbers')
.indexCreate('idx', [ r.row('group')('a'), r.row('group')('b') ],
{multi : true});
r.db('test').table('numbers').insert([
{name : 'Foo', group : {a : 2, b : 3}},
{name : 'Bar', group : {a : 2, b : 9}},
{name : 'Baz', group : {a : 2, b : 3}},
{name : 'Qwer', group : {a : 4, b : 4}}
]);
Run Code Online (Sandbox Code Playgroud)
现在我去运行查询between.对于这个例子,我希望看到三个文件返回,但我没有得到任何文件:
r.db('test').table('numbers').between([ 2, 0 ], [ 3, 5 ], {index : 'idx'});
// No results …Run Code Online (Sandbox Code Playgroud) 我需要最佳实践技巧,以增强我的noSQL数据库(在Firebase上托管)的性能。此外,我需要有关如何构造节点的技巧。
该数据库存储产品信息,具有三个主要属性:
$productId
/date
/category
/subcategory
Run Code Online (Sandbox Code Playgroud)
在我的网站上,我有三种看法:
请注意,我还有一个节点product_images,其子节点与productID匹配。因此,按以下方式构造数据库:
$categoryId
$subCategoryId
$productId
Run Code Online (Sandbox Code Playgroud)
无法使用,因为我需要事先知道$ categoryId和$ subCatrgoryId,然后才能将其与$ productId匹配。这也将使检索最后4个产品变得困难。
我将如何高效地构建noSQL数据库,以及如何使用Firebase筛选出具有多个限制的产品来检索产品?
我知道在Firebase中可以使用orderByChild和equalTo,但这仅适用于一个限制,而我必须处理一到三个。
我正在研究DocumentDB,我正在检查查询端选项.我知道目前尚未确定任何事情,但有一些我已经看到完全回答的问题.
Couchbase退出了UnQL?然后开发N1QL?这是否意味着他们将N1QL视为更合适的不同查询语言?或者它是否扩展了UnQL中设置的内容?有什么事实上正式标准化?
有人允许实施N1QL吗?这是一个开放的事实上的标准,而不是以某种方式获得专利的东西.
[
{
"userid": "abcde",
"dates": {
"2-01-2015": {
"9-10": {
"ava": "yes",
"bookibg_id": "null"
},
"10-11": {
"ava": "yes",
"bookibg_id": "null"
}
},
"3-01-2015": {
"9-10": {
"ava": "no",
"bookibg_id": "null"
},
"10-11": {
"ava": "no",
"bookibg_id": "null"
}
}
}
},
{
"userid": "abcde",
"dates": {
"2-01-2015": {
"9-10": {
"ava": "yes",
"bookibg_id": "null"
},
"10-11": {
"ava": "no",
"bookibg_id": "null"
}
},
"3-01-2015": {
"9-10": {
"ava": "no",
"bookibg_id": "null"
},
"10-11": {
"ava": "no",
"bookibg_id": "null"
} …Run Code Online (Sandbox Code Playgroud) 我试图在CouchDB上部分复制数据库.这是我使用命令提示符实现的查询:
CURL POST http://localhost:5984/_replicate HTTP/1.1 Content-Type: application/json {"source":"source_db", "target":"target_db", "doc_ids":["00123f8-8uht1-81ia-n1762-81ubas81762121iaj1"]}
Run Code Online (Sandbox Code Playgroud)
这是错误:
Failed to connect to POST port 80: Timed Out
{"error":"method_not_allowed", "reason":"Only POST allowed"}
Run Code Online (Sandbox Code Playgroud)
导致错误的原因是什么?我如何摆脱它?
我想在MongoDB数据库中插入一条记录,但前提是它还不存在.有些东西告诉我这个代码在性能方面不是最佳的:
if db.foo.find(record).count() == 0:
db.foo.insert(record)
Run Code Online (Sandbox Code Playgroud)
怎么做最快的方式?
就像sql和无sql数据库都有优点和缺点一样,因此如果我们要利用这两个数据库的优点。我们可以这样做吗?就像复杂查询一样,我们应该首选sql而非no sql,并且对于分层数据存储,没有sql数据库比sql数据库更好。因此,如果有一种将两者结合的方法,请对此进行简要介绍。
我跟随json作为Couchbase中的一个条目:
{
"messageType": "TRANS",
"failCount": 0,
"workOrderDetailMap": {
"10873": {
"requestDate": "20160715151239",
"id": 10873,
"responseDate": "20160715151305",
"responseCode": 0,
"status": "SUCCESS",
"resultDocuments": [
"xyz"
]
}
}
}
Run Code Online (Sandbox Code Playgroud)
我想resultCode通过N1QL查询得到字段:
Select * from myproject where workOrderDetailMap.responseCode = 0;
Run Code Online (Sandbox Code Playgroud)
我得到0结果.
我怎样才能做到这一点 ?
我正在开发一个全球应用程序,其中大多数搜索基于地理数据(最近的记录给定坐标)和日期范围.
因此,基本上可能是AirBnb,Booking等应用程序的主要搜索.
考虑到这些上下文,我应该在DocumentDB分区集合中选择哪个分区键?
谢谢!
更新:就像我告诉马蒂亚斯(见答案),我和我的朋友,我们正在考虑像国家这样的事情.该应用程序是关于搜索.另一件重要的事情是我们有约会.大量的约会.由于我们是DDB的新手,我们的问题是:" 如果我们选择国家作为分区密钥,我们的查询必须在不同国家/地区内搜索,会发生什么? ".即在国家边界附近搜索georadius.