好的,我刚开始使用Firebase。我已阅读:https://www.firebase.com/docs/data-
structure.html,
并且已阅读:https://www.firebase.com/blog/2013-04-12-denormalizing- is-
normal.html
所以我很困惑,因为一个似乎与另一个矛盾。您可以按层次结构组织数据,但是如果您想使其具有可伸缩性,那就不要。但这不是实际的问题。
对于博客引擎,我具有以下结构(如果错误,请更正):
"authors" : {
"-JHvwkE8jHuhevZYrj3O" : {
"userUid" : "simplelogin:7",
"email" : "myemail@domain.com"
}
},
"posts" : {
"-JHvwkJ3ZOZAnTenIQFy" : {
"state" : "draft",
"body" : "This is my first post",
"title" : "My first blog",
"authorId" : "-JHvwkE8jHuhevZYrj3O"
}
}
作者列表和帖子列表。首先,我想让Author userUid
等于我当前用户的uid
。然后,我想获得的职位authorId
是提供给查询的职位。
但是我不知道该怎么做。任何帮助,将不胜感激!如果这有所作为,我正在使用AngularFire。
Firebase是NoSQL数据存储。这是一个JSON层次结构,没有传统意义上的SQL查询(这些查询与快如闪电的实时操作并不真正兼容;它们往往很慢且昂贵)。已经计划了一些地图精简样式功能(合并的视图和工具来辅助此功能),但是目前您的主要武器是适当的数据结构。
首先,让我们解决树层次结构与非规范化数据之间的关系。您应该对以下几项进行非规范化:
以下是一些可能无法正常化的事情:
.child(...).on('value', ...)
获取某些记录,并且显示该记录中的所有内容,而从未引用父列表,则没有理由针对可迭代性进行优化)提取作者就像将id添加到URL一样简单:
var userId = 123;
new Firebase('https://INSTANCE.firebaseio.com/users/'+userId);
要获取属于某个用户的帖子列表,请维护该用户帖子的索引:
/posts/$post_id/...
/my_posts/$user_id/$post_id/true
var fb = new Firebase('https://INSTANCE.firebaseio.com');
fb.child('/my_posts/'+userId).on('child_added', function(indexSnap) {
fb.child('posts/'+indexSnap.name()).once('value', function(dataSnap) {
console.log('fetched post', indexSnap.name(), dataSnap.val());
});
});
诸如Firebase.util之类的工具可以帮助标准化已拆分存储的数据,直到发布Firebase的视图和高级查询utils:
/posts/$post_id/...
/my_posts/$user_id/$post_id/true
var fb = new Firebase('https://INSTANCE.firebaseio.com');
var ref = Firebase.util.intersection( fb.child('my_posts/'+userId), fb.child('posts') );
ref.on('child_added', function(snap) {
console.log('fetched post', snap.name(), snap.val();
});
或仅按用户ID存储帖子(取决于您的用例,以后如何获取数据):
/posts/$user_id/$post_id/...
new Firebase('https://INSTANCE.firebaseio.com/posts/'+userId).on('child_added', function(snap) {
console.log('fetched post', snap.name(), snap.val());
});
非规范化数据不存储规范化的数据。换句话说非规范化意味着相同数据的多个拷贝同时存在。 上一章中,我们在帖子中非规范化评论总数,以避免每次都加载所有的评论。在数据建模意义上说这是冗余的,因为我们可以通过计数每个评论,随时计算出该总数(当不考虑运行速度)。 非规范化通常意味着额外的开发工作。在例子中,我们每次添加或删除评论时,还需要同时更新相关的帖子,以确保 commentsCount 字段保持准确。这
问题内容: 假设我有一个客户表: 此表也 没有 主键。但是,并且对于任何给定都 应该 是唯一的。 该表包含许多重复的客户并不少见。为了避免重复,使用以下查询仅隔离唯一的客户: 幸运的是,该表格传统上包含准确的数据。也就是说,从来没有任何冲突或任何冲突。但是,假设有冲突的数据确实将其放入表中。我希望编写一个将失败的查询,而不是为有问题的查询返回多行。 例如,我尝试此查询没有成功: 有没有办法使用标准
问题内容: 我已经阅读了有关“ 构建数据”的Firebase文档。数据存储很便宜,但用户的时间却不便宜。我们应该针对get操作进行优化,并在多个地方编写。 因此,我可能会存储一个 列表 节点和一个 列表索引 节点,两者之间有一些重复的数据,至少是列表名称。 我正在使用ES6,并在我的javascript应用程序中承诺处理异步流,主要是在第一次数据推送后从firebase中获取ref键。 知道我的应
问题内容: 用例说明 我们有一个关系数据库,其中包含有关我们日常运营的数据。目的是允许用户使用全文本搜索引擎来搜索重要数据。数据经过规范化,因此不是进行全文查询的最佳形式,因此,其想法是对数据的一部分进行规范化,然后将其实时复制到Elasticsearch,这使我们能够创建快速而准确的搜索应用程序。 我们已经有了一个启用数据库操作(插入,更新,删除)事件搜索的系统。这些事件仅包含已更改的列和主键(
问题内容: 我正在使用Ruby on Rails 3.0.7和MySQL5。在我的应用程序中,我有两个数据库表,即TABLE1和TABLE2,并且出于性能原因,我对TABLE2中的某些数据进行了非规范化,因此我在该表中重复了TABLE1的值。现在,在TABLE1中,我需要更新一些涉及的值,当然,我还必须在TABLE2中正确地更新非规范化的值。 我该如何以高效的方式更新这些值? 也就是说,如果TAB
我阅读了cassandra数据建模,除了非规范化数据可能会发生变化之外,一切都很清楚。我如何同步它?当用户电子邮件更改时,更新的方法是什么: < code>groupname是组的一部分,数据模型中的用户可能不知道任何组,因此在用户更改后无法更新电子邮件。 下面描述的解决方案是否合适? 向用户模型中添加一列(类型