标签: non-relational-database

战略问题:混合关系数据库和非关系数据库?

有很多关于反革命NoSQL数据库的讨论,如Cassandra,CouchDB,Hypertable,MongoDB,Project Voldemort,BigTable等等.就我而言,最强大的优点是可扩展性,性能和简单性.

我正在认真考虑建议在下一个项目中使用一些非关系数据库.然而,一些团队包含一些RDBMS狂热分子,因此在某些情况下仅仅因为情感原因而难以说服硬切换.此外,当谈到复杂的数据模型时,我个人仍然相信RDBMS的强大功能与低级别的协调执行机制.

现在我的问题出现了:我想知道,如果有人可以认真考虑在新项目中同时使用RDBMS 非关系数据库:复杂但不是性能关键的数据模型仍然可以使用关系模型和数据库实现,而所有性能至关重要,但是,简单模型将使用非关系数据库实现.此外,这种软范式的转变对于一些高度情绪化的团队成员来说要比出现困难的团队成员更容易出售.

有人会推荐这样的方法吗?或者您更愿意推荐黑色或白色,即关系或非关系方法?所有评论都非常欢迎!


PS:任何想法,如果这样的混合适用于Spring和Hibernate/JPA?

database orm rdbms non-relational-database relational-database

13
推荐指数
1
解决办法
2059
查看次数

MongoDB/NOSQL:处理消息上的读/未读状态的最佳方法

假设您有大量用户(M)和大量文档(N),并且您希望每个用户能够将每个文档标记为已读或未读(就像任何电子邮件系统一样).在MongoDB中表示这个的最佳方法是什么?还是其他任何文件数据库?

StackOverflow上有几个问题问关系数据库这个问题,但是我没有看到任何关于文档数据库的建议:

什么是记住多个项目的读取/未读状态的最有效方法?

实施有效的"未读评论"计数器系统

通常,答案涉及一个列出用户已读取的所有内容的表:(即用户ID元组,文档ID),其中包含一些可能的截止日期优化,允许标记全部读取以擦除数据库并重新开始知道任何内容在该日期之前是'读'.

那么,MongoDB/NOSQL专家,你在实践中看到了什么方法来解决这个问题,它们是如何运作的?

database-design non-relational-database mongodb nosql

13
推荐指数
2
解决办法
3663
查看次数

图表数据库是否弃用关系数据库?

我是任何类型的DB的新手.看起来你可以用图表形式表示任何关系数据库(虽然它可能是一个非常扁平的图形),以及关系数据库中的任何图形数据库(有足够的表).

通过从一个条目到另一个条目的硬链接,图形可以避免在其他表中进行大量查找,因此在很多/大多数情况下,我可以看到图形的速度优势.如果您的数据是自然分层的,特别是如果它形成一棵树,我会看到关系图上的逻辑/推理优势.我想象一个链接到其他节点的图形节点可能包含多个地图或列表......它实际上包含图形节点内的关系数据库.

图表db与关系数据库有什么不利之处吗?(注意:我不是在寻找实现中缺少功能的东西,而是理论上的优点/缺点)

我什么时候还应该使用关系数据库?即使我逻辑上有一个int到int的单一映射,我也可以在图中完成.

database graph non-relational-database relational-database nosql

13
推荐指数
3
解决办法
5144
查看次数

如何为消费者应用程序设计"NOSQL"数据库(例如社交书签)

我一直在阅读很多关于非关系型数据库,整个NOSQL运动的帖子,并且围绕它进行了很多新的活动.这似乎是构建高度可扩展的Web应用程序的一种非常有趣的方法,但不幸的是(在这个新生阶段也是一件好事)目前还没有一个明确的领导者/标准.

我的背景是在LAMP堆栈中(以MySQL作为dB),我想了解它会有什么差异和限制 - 但是使用现实生活中的Web应用程序的例子.关于RDBMS与非RDBMS的优缺点理论有很多很好的文章,但是我没有找到任何有关如何构建现有Web应用程序(例如社交书签)的示例新的dB结构的优势以及如果有的话可以省去哪些功能 - NOSQL dB可以是键值还是以文档为中心的或图形.

是否有人愿意接受对现实世界网络应用程序的NOSQL与RDBMS模型/架构的高级别比较(例如社交书签或可能很好地解释这些概念的任何其他示例)?

有关其他人的参考,以下是我遇到的一些文章:

rdbms database-design scalability non-relational-database nosql

12
推荐指数
1
解决办法
3508
查看次数

如何将Firebase用作生成密钥(JS)的关系数据库?

我正在使用Firebase作为后端存储机制(JSON)的简单JavaScript Twitter克隆.我熟悉关系数据库(SQL),但不熟悉非关系数据库.我目前正在尝试研究如何在Firebase中设计数据集的结构,因为没有外键关系或表连接.

该应用程序有三个表,users,tweets,和followers.用户可以发布推文,也可以关注其他用户并查看推文的摘要.尝试创建数据结构时会出现问题,因为我不知道如何加入必要的表.例如,我将如何实现用户关注功能?

这是我用来给自己起点的ERD:

应用程序的ERD

正如我一直在试图环绕这整个事情的JSON我的头,这是最接近的,我可以将它与关系数据库,同时仍使用火力地堡的.push()功能添加到列表数据库(从火力地堡看到仪表板):

Firebase尝试

我看到有些人试图通过"取消规范化"数据来解决这个问题,理由是Firebase没有任何查询机制.然而,这些文章都主要是在2014年之前,也就是当火力地堡添加查询.话虽如此,我不明白使用查询如何帮助我,我想我已经陷入了生成的密钥.

我应该如何最好地构建我的数据以使用Firebase JSON列表?我已经阅读了他们的一些文档,但无法找到任何使用我正在寻找的东西和生成的密钥.

我应该尝试以.set()某种方式使用该方法,并使用电子邮件地址作为用户的"主键"而不是生成的密钥?[如下所述,这是我计划避免的事情.谢谢@metame]

更新

这更像是我应该关注的数据结构吗?然后按键查询?

users: {
    Hj83Kd83: {
        username: "test",
        password: "2K44Djl3",
        email: "a@b.c"
    },
    J3kk0dK4: {
        username: "another",
        password: "33kj4l5K",
        email: "d@e.f"
    }
}

tweets: {
    Jkk3ld92: {
        userkey: "Hj83Kd83",
        message: "Test message here!"
    },
    K3Ljdi94: {
        userkey: "J3kk0dK4",
        message: "Another message here!"
    }
}

followers: {
    Lk3jdke9: {
        userkey: "Hj83Kd83",
        followerkey: "J3kk0dK4"
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我还要包含其他内容,请告诉我!

javascript database json non-relational-database firebase

12
推荐指数
1
解决办法
1万
查看次数

使用GAE数据存储区的复杂查询

我正处于开发体育统计网站(终极飞盘)的早期阶段,如果Google App Engine适合我,我想知道您的意见.

我使用Django在Python中编写它并且已经习惯了标准的RDBMS多年,但是这个站点是一个长期项目,我期待非常大量的数据,所以我希望GAE数据存储提供"无限"的扩展.绝大多数对数据库的查询都会返回非常标准的结果,这会使数据存储看起来像是一个合理的选择.但是,我希望将来能够提出极其复杂的查询来提出新的统计指标,或者只是想出有趣的结果.我计划将来做很多这样的事情,但是在收集数据之前不会知道这些查询是什么.

例如,你经常看到棒球统计分析师提出荒谬的统计数据,例如"这是过去50年来第一次两名左手投手,其姓氏以'Z'开头,连续投出一击天".我希望将来能够灵活地提出任何疑问.:)

但是,我认为像bigtable这样的非关系型数据库需要您预先提供包含冗余数据的模型,并且所有工作都在插入而不是提取上进行.我已经构建了几乎包含我需要查询的所有数据的django模型,但是我不知道从现在开始我想要一年或两年的非规范化模型.因此,我觉得在GAE数据存储区中进行复杂查询将是非常困难的,并且需要我在python中处理它之前从服务器上提取大量信息.

谷歌应用引擎数据存储是否完全错误,我想做什么?或者我只是缺少一些东西.非常感谢提前!

更新: 感谢目前为止的回复.我意识到我还应该提到很多这些复杂的查询是我希望用户能够做的查询,因此使得脱机数据库不是一个真正的选择.例如,用户应该能够看到各种特定玩家在特定游戏或季节期间同时在场上时的比赛的各种统计数据.虽然这些查询不像标准聚合统计数据那样频繁,但它们仍然会定期发生.

拥有关系数据库以及GAE数据存储区会很棒,但django默认情况下不支持多个db,并且一起修补解决方案听起来很困难而且很混乱.Eric Florenzano 为使用django模型的两个数据库提供了一个很好的解决方案,但如果我使用GAE数据存储区,我将不得不使用app引擎的db模型.并且提出了一个很好的解决方案,就像他为这个复杂问题所做的那样,在这一点上有点超出我的技能水平.

现在我最喜欢的两个选项是使用GAE任务队列来执行困难的查询,或者使用像webfaction这样的更标准的webhost,然后在我的数据增长后再对我的表进行非规范化,我需要提高性能.

django google-app-engine database-design non-relational-database google-cloud-datastore

9
推荐指数
2
解决办法
2391
查看次数

Mongo db使用$ in在另一个查询中使用查询结果

我在mongo db中有以下模型:

用户集合

{
_id:12345,
name:15,
age:"Joe",
}
Run Code Online (Sandbox Code Playgroud)

地址集合

{
_id:7663,
userId:12345,
Street:"xyz",
number:"1235",
city:"New York",
state:"NY"
}
Run Code Online (Sandbox Code Playgroud)

现在我想得到20岁以上用户的所有地址.我想的是查询20岁以上用户的所有id,并使用$ in运算符查找地址.

我的问题是,有没有办法把它变成一个查询?有更好的方法来查询吗?(obs:这只是一个例子,我的问题是我无法将地址嵌入用户)

non-relational-database document-based-database mongodb mongodb-query aggregation-framework

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

适用于中小型应用程序的非关系数据库(NoSQL)

当在大规模数据集(google,facebook,linkedin)中使用时,非关系数据库(例如键值对存储)的好处是显而易见的.您如何看待中小型应用程序可以从使用非关系数据库中受益?

non-relational-database nosql amazon-simpledb

8
推荐指数
1
解决办法
2129
查看次数

Neo4j - 在图表中存储医疗症状

我正在使用Neo4j图数据库来存储医学症状和疾病.这背后的目的是提供一个人可以从用户进入系统的症状中获得疾病的建议.现在我存储了如下各种症状.医疗症状

这是一个非常基本的图形结构,我通过密码查询匹配模式来检索疾病,例如发烧,头痛和流感的原因交集.我想要实现的是构建一个涉及位置和年龄因子等的复杂结构,并编写各种算法以通过有效遍历来检索连接最多的节点.我无法在互联网上找到如此复杂的结构,所以任何建议都会受到赞赏.尽管问题编码不多,但请提出一些建议,因为它只是一个大学项目,我必须更进一步.

graph non-relational-database neo4j graph-databases cypher

8
推荐指数
1
解决办法
1096
查看次数

MongoDB初学者 - 规范化还是不规范化?

我会尝试尽可能直截了当地做到这一点.
来自MySQL并考虑表格,让我们使用以下示例:

假设我们有一个房地产网站,我们正在显示房屋清单
,我会使用下表:

  • 房屋 - 手头的房地产资产
  • 业主 - 房子的主人(与房屋的一对多关系)
  • 代理商 - 房地产经纪机构(与房屋的多对多关系)
  • 图像 - 与房屋的多对一关系
  • 评论 - 与房屋的多对一关系

据我所知,MongoDB可让您灵活地在不同的集合中设计您的Web应用程序,其中包含与关系数据库(规范化)非常相似的唯一ID,并且为了享受快速选择,您可以在集合,相关对象和数据中嵌套(未标准化) ).

回到我们的房地产房屋列表,用于填充它的查询在普通的关系数据库中相当昂贵,对于每个房屋,您需要查询其图像,评论,所有者和代理商,每个实体都位于不同的表中,其中包含其字段,你可能会使用连接并将多个查询合并为一个 - 昂贵!

输入MongoDB - 您不需要连接,并且您可以将房屋的所有相关数据存储在房屋集合中的房屋项目中,选择从未更快,这是天堂!
但是当您需要添加/更新/删除相关评论/代理/所有者/图像时会发生什么?

这对我来说是一个谜,如果我需要猜测,每个相关的集合都存在于其自己的集合中,并且在house表中的数据之上,并且一旦这些相关数据中的一个被添加/更新/删除,你就会'我必须在自己的集合以及房屋集合上更新它.在此更新时 - 我是否还需要查询其他集合以确保我使用所有更新的相关数据更新房屋记录?
我只是在这里猜测,非常感谢您的反馈.

谢谢,
Ajar

database non-relational-database mongodb nosql

7
推荐指数
1
解决办法
3808
查看次数