我正在尝试使用.NET客户端刷新存储桶中的所有数据.这是我正在使用的代码:
_instance = new CouchbaseClient();
_instance.FlushAll();
Run Code Online (Sandbox Code Playgroud)
但是,抛出以下异常消息"要刷新Couchbase存储桶,请使用Couchbase.Management API."
我也启用了"Flush"启用设置.
我真的很难弄清楚有关社交网站(Facebook作为参考)如何管理其用户的评论和通知的见解.
他们如何实际存储评论数据?如何存储通知并将其发送给所有用户.一个示例场景是,朋友评论我的状态,并且每个喜欢我状态的人都会收到通知.此外,每个用户都有自己的读/未读功能,所以我猜有一个为每个用户存储的通知参考.但随后会有很多通知信息的冗余.如果我们使用单独的表/集合来存储它们并参考实际的notificatin,那么这将产生实时可伸缩性问题.那么你将如何决定权衡方式呢?当我想到这一切时,我的大脑崩溃了.通过网络提供的帮助不足以解决太多问题.
现在,如何将每个通知发送给应该接收该通知的所有用户......以及数据结构的外观如何.
我阅读了许多建议使用MySql的实现.我的理解是,那种数据(大小)就是,最好使用NoSql来实现可扩展性.那么MySql如何很好地适用于这样的用例,为什么像Mongo这样的NoSql在任何地方都没有被建议用于这种实现,因为这些都是高度可扩展的.
好吧,我知道很多问题.但我不是在寻找一个完整的答案,对特定事物的见解也对我构建自己的应用程序有很大的帮助.
我本身对Java并不陌生...或者自己寻找答案。但是由于某种原因,我无法导入OrientDB软件包。我看了以下简单示例:
https://github.com/orientechnologies/orientdb/wiki/Java-Tutorial:-简介
例:
import com.tinkerpop.blueprints.TransactionalGraph;
import com.tinkerpop.blueprints.impls.orient.OrientGraph;
Run Code Online (Sandbox Code Playgroud)
但是对于我使用的任何导入组合,我都会不断收到“包*不存在”的信息。
我的印象是,开始所需要做的就是'orientdb-community-1。/ lib / orientdb-core-1。。罐'。“ com”,“ tinkerpoop”和“蓝图”来自哪里?
我是noSQL技术的新手,我很惊讶没有任何交易支持.我的主要问题是当我完成一些插入任务时,插入包含~5个单独的插入.我们必须通过4个不同的ID找到一份文件.问题是该文档相当大,存储它是非常昂贵的:
关键| 值
user1 HugeDoc1
因此,我们提出了一个内部标识,指向文档.是的,我知道这个设计有点违反了整个noSQL概念,但它节省了大量内存.如果文档插入失败,则ID没有意义,应该删除.编写自己的回滚处理,跟踪成功的插入/更新是一个好主意吗?或者整个概念是错的?
我正在开发一个离线工作的原型网站,该网站利用Pouch DB,以便在它上线时同步回服务器上的CouchDB.
该袋DB冲突指导说:
要解决冲突,您可以在当前获胜者的基础上添加()新修订.
你怎么做到这一点?我尝试了以下功能但是没有按预期工作:
function (current, chosen) {
chosen._rev = current._rev;
chosen._conflicts = [];
db.put(chosen);
};
function (chosen) {;
db.put(chosen);
};
Run Code Online (Sandbox Code Playgroud)
top函数有两个文档:
我在某些地方(比如这里)读到删除丢失的冲突是必要的,但如果可能的话我宁愿不删除任何内容,而Pouch DB指南也没有提到这一点.
Cassandra 文档和博客说,带有条件更新语句的批处理在分区的粒度下工作,而分区是由主键中的第一个键定义 所以,我有以下键空间:
CREATE TABLE SOCIAL_PROFILE (
soc_net_type text,
soc_net_user_id text,
user_prof_id text,
PRIMARY KEY (soc_net_type, soc_net_user_id));
CREATE TABLE SOCIAL_PROFILE_CONTACT (
soc_prof_soc_net_type text,
soc_prof_soc_net_user_id text,
soc_net_user_id text,
PRIMARY KEY (soc_prof_soc_net_type, soc_prof_soc_net_user_id, soc_net_user_id));
Run Code Online (Sandbox Code Playgroud)
并插入声明:
BEGIN BATCH
INSERT INTO social_profile (soc_net_type, soc_net_user_id, user_prof_id) VALUES ('vk', '1', '100') IF NOT EXISTS;
INSERT INTO social_profile_contact (soc_prof_soc_net_type, soc_prof_soc_net_user_id, soc_net_user_id) VALUES ('vk', '1', '2');
INSERT INTO social_profile_contact (soc_prof_soc_net_type, soc_prof_soc_net_user_id, soc_net_user_id) VALUES ('vk', '1', '3');
INSERT INTO social_profile_contact (soc_prof_soc_net_type, soc_prof_soc_net_user_id, soc_net_user_id) VALUES …
答案
因此,当我在Mongoose中使用expires属性进行测试时,我成功地在数据库中设置了TTL索引,但没有意识到当我在我的mongoose模式中更改时间时我需要删除以前的TTL索引首先退出数据库.
TLDR; - 停止应用程序并删除要更改的字段的TTL索引(请参阅下面的评论/答案)
得到索引
好的,以下示例中的代码,在调用之后:
db.sampletexts.getIndexes()
我得到了
[
{
"v" : 1,
"key" : {
"_id" : 1
},
"name" : "_id_",
"ns" : "test.sampletexts"
},
{
"v" : 1,
"key" : {
"createdAt" : 1
},
"name" : "createdAt_1",
"ns" : "test.sampletexts",
"expireAfterSeconds" : 5400,
"background" : true,
"safe" : null
}
]
Run Code Online (Sandbox Code Playgroud)
所以虽然我指定60秒,它的设置为5400?呵呵.
第二次更新
这是我试图运行的最小例子.我必须在这里遗漏一些东西,因为我实际上将我的模型从原始项目复制到示例(减去一些额外的字符串字段),现在文档根本没有过期?拜托,让我感到愚蠢,并意识到我错过了一些明显的东西.我想了一下,设置一个间隔来运行文档和当前时间之间的时差检查,然后意识到通常会扩展的许多查询运行得有多糟糕.嗯...
MongoDB v3.0.1 && Mongoose v4.0.1
相关代码:/routes/index.js
我运行的一些测试值:
整个领域看起来像这样
createdAt: { type: Date, expires: 3600, default: …Run Code Online (Sandbox Code Playgroud) 我的数据库中有一个"用户"集合.用户可以是多个团队的成员.
我使用数组来引用团队ID.
{ _id: ObjectId("552544fd600135861d9e47d5)",
name : "User1",
teams: [
"5527a9493ebbe2452666c238",
"5527b1be3371e3a827fa602c"
]
}
Run Code Online (Sandbox Code Playgroud)
这些团队只不过是一个集合:
{ _id: ObjectId("5527a9493ebbe2452666c238"),
name: "Team 1"
}
{ _id: ObjectId("5527b1be3371e3a827fa602c"),
name: "Team 2"
}
Run Code Online (Sandbox Code Playgroud)
现在我想获得用户所属的所有团队的名称.
我只是找到了这样查询的方式:
db.teams.find(
{_id:{$in:
[ObjectId("5527a9493ebbe2452666c238"),
ObjectId("5527b1be3371e3a827fa602c")]
}})
Run Code Online (Sandbox Code Playgroud)
为此,我需要专门为此查询创建一个数组.我宁愿尝试避免这种情况,因为我已经将ID作为字符串格式的数组提供.像这样的东西会很棒:
db.teams.find(
{_id:{$in:
["5527a9493ebbe2452666c238",
"5527b1be3371e3a827fa602c"] // Strings here, not ObjectIDs
}})
Run Code Online (Sandbox Code Playgroud)
但这不起作用.有没有什么方法可以用一组字符串ID查询ObjectID?
谢谢你和罗尔夫
有这样的嵌套文档时:
{
"blog": "testblog1",
"user_id": 41,
"comments": [
{
"comment": "testcomment1",
"user_id": 883
},
{
"comment": "testcomment2",
"user_id": 790
}
]
}
Run Code Online (Sandbox Code Playgroud)
可以使用N1QL进行更新操作以向子文档添加额外的字段吗?
我想"ranking" : "top comment"使用注释testcomment2 将该字段添加到子文档:
{
"blog": "testblog1",
"user_id": 41,
"comments": [
{
"comment": "testcomment1",
"user_id": 883
},
{
"comment": "testcomment2",
"user_id": 790,
"ranking" : "top comment"
}
]
}
Run Code Online (Sandbox Code Playgroud)
站点注意:以下语句将向集合博客上的根文档添加一个字段:
UPDATE Blog SET rank = "top blog" WHERE blog = "testblog1";
Run Code Online (Sandbox Code Playgroud) 编辑*感谢代码格式化的陌生人,我会记住以后!
我遵循基本的planetcassandra.org Cassandra教程,我不明白为什么我不能执行以下查询:
select *
from users
where lastname = 'Smith' AND city = 'X';
Run Code Online (Sandbox Code Playgroud)
在这张桌子上:
CREATE TABLE users
(
firstname text,
lastname text,
age int,
email text,
city text,
PRIMARY KEY (lastname)
);
Run Code Online (Sandbox Code Playgroud)
根据我的理解,分区键(lastname)对数据进行分区.所以带有姓氏史密斯的所有行都应该在节点X上.什么阻止我进一步过滤这些行呢?
谢谢!