我在是否使用 MongoDB 或 Cassandra 来满足我的数据库需求的具体决定之间犹豫不决,并希望对我的用例进行输入以指导我的决定。
要求:
数据源
例如目前(3 个数据中心、50 个服务器、19 个网络和 10 个统计数据)。这些数字会随着时间的推移而增加。
数据获取:
数据存储:
注意:我们需要具备以下能力:
用例示例:在前端,您将像这样查询,选择;日期窗口、期间报告、特定数据中心、特定/所有网络、特定/所有统计数据以及结果是跨服务器总计还是单独。
Example #1
- From: August 16th 2012 -> April 16th 2013
- Period: Daily
- Data-center: EU A
- Stat-type: Error
- Servers: All
Run Code Online (Sandbox Code Playgroud)
通过阅读堆栈溢出和网络上的类似文章,我得出的结论是,我最好的选择可能是 MongoDB,因为它具有灵活的查询和与关系数据库的接近度。如果我的写作量更大,Cassandra 似乎是一个选择——尽管我确实喜欢基于列的模型。我是数据库设计和管理的新手,因此易用性也是一个因素(仍然是 CS 学生)。
从我的用例中哪个 NoSql 数据库是最好的选择?
我一直在寻找 NoSQL 数据库。在我对互联网的研究中,我发现 Cassandra DB 是使用最广泛的 NoSQL DB。我也想在我的 Android 应用程序中使用它,但没有找到有关其 Android 版本的任何信息。
有没有像 CouchDB 这样的 API 有 Ektorp 可以在 Android 中使用它?根据 Cassandra DB 的决定,我是否朝着正确的方向前进?
我需要它的 Android API 和教程来开始吗?我只在 StackOverflow 上找到了这个链接,但它对我没有帮助。
我决定将 MySql 或 NoSQL 用于论坛站点。我对整个 NoSQL 想法很陌生,在阅读文档时我注意到“项目”不能大于 64kb,这包括属性和值。从我理解的方式来看,我能想到的实现这一点的唯一方法是这样的:
Posts: [
{ user: 'gates', text: 'first post'
comment: [
{ user: 'jim', text: 'comment1',
user: 'bobby', text:'comment2'
}
]
},
{ user: 'jim', text: 'second post' }
]
Run Code Online (Sandbox Code Playgroud)
这里的问题是如果一个帖子有很多评论,它会超过该项目的 64kb 限制。是否有另一种实现这种“帖子/评论关系”的方法可以很好地扩展?
我正在将 Titan 与 Cassandra 一起使用,并且有几个关于使用 Gremlin 查询数据库的(相关)问题:
1.) 有没有比计算所有顶点更快的方法
g.V.count()
Run Code Online (Sandbox Code Playgroud)
Titan 声称使用索引。但是如何使用没有属性的索引?
WARN c.t.t.g.transaction.StandardTitanTx - Query requires iterating over all vertices [<>]. For better performance, use indexes
Run Code Online (Sandbox Code Playgroud)
2.) 是否有比计算属性为“myProperty”的所有顶点更快的方法
g.V.has('myProperty').count()
Run Code Online (Sandbox Code Playgroud)
再次泰坦意味着以下:
WARN c.t.t.g.transaction.StandardTitanTx - Query requires iterating over all vertices [(myProperty<> null)]. For better performance, use indexes
Run Code Online (Sandbox Code Playgroud)
但是,我又该如何做到这一点?我已经有一个“myProperty”的索引,但它需要一个值来快速查询。
3.) 与边缘相同的问题......
最初我们的服务器从 4 个分片开始。在网站运行几年后,我们决定再添加 4 个分片来帮助减轻现有服务器的负载,现在的问题是分片分布非常不均匀,因此新服务器没有帮助减轻负载. 以下是我们较大的集合之一的分片分布示例
Shard shard0000 contains 15.56% data, 15.56% docs in cluster, avg obj size on shard : 143B
Shard shard0001 contains 15.12% data, 15.12% docs in cluster, avg obj size on shard : 143B
Shard shard0002 contains 16.73% data, 16.73% docs in cluster, avg obj size on shard : 143B
Shard shard0003 contains 15.62% data, 15.62% docs in cluster, avg obj size on shard : 143B
Shard shard0004 contains 9.31% data, 9.31% docs in cluster, avg …Run Code Online (Sandbox Code Playgroud) 我希望使用mongo DB作为我的项目,但不想进行管理开销来管理mongo服务.
由于我的项目目前正在AWS上托管其大部分组件,我正在寻找AWS提供的托管mongo数据库服务(如果有).
AWS提供Dynamo数据库作为托管服务,并且有很好的文档,但是通过AWS访问Mongo DB托管服务对我来说并不是很清楚.
我已经阅读了Mongo DB托管服务 - "Atlas"但不确定我是否可以在现有的AWS实例中将其作为服务访问.
请提供适合此方案的最佳实践的输入.
amazon-ec2 mongodb amazon-web-services nosql amazon-dynamodb
Apache Kafka是一种实时消息传递服务。它以分布式和容错的方式安全地存储数据流。在向生产者发送消息时,我们可以过滤流数据。我并不理解为什么我们需要像MongoDB这样的NoSQL数据库在Apache Kafka中存储相同的数据。真正的问题是,为什么我们将相同的数据存储在NoSQL数据库和Apache Kafka中?
我认为,如果需要NoSQL数据库,则可以首先从MongoDB中的客户端收集数据流,而无需使用Apache Kafka。但是,大多数大数据体系结构偏好在数据源和NoSQL数据库之间使用Apache Kafka。(请参阅参考资料)

对于实际系统而言,这有什么优势?
我对DynamoDB还是陌生的,并试图理解关系。
我有一个包含用户,列表和项目的待办事项应用程序。
我创建了3个dynamoDB表,一个用于用户,一个用于列表,一个用于项目。
为简单起见,以用户/列表为例。用户的主键是userId。列表主键是listId。用户可以有很多列表。列表可以在用户之间共享,因此列表可以有许多用户。
那么,列表应该作为listId的数组保存在用户项中吗?然后,当我得到一个用户时,我遍历listId的数组并获取所有列表?
用户可以有很多列表,而列表又可以有很多项目,因此我不想将整个列表保存在用户项目中。该列表也可以被许多用户共享。
我已经尝试搜索关系,但是它们似乎都是从读者对NOSQL数据库有广泛理解的假设开始的,而我没有。
我想以以下格式存储数据:
{
"chatName": "Football",
"chatMembers":
[
{
"userId": "nSWnbKwL6GW9fqIQKREZENTdVyq2",
"name": "Niklas"
},
{
"userId": "V3QONGrVegQBnnINYHzXtnG1kXu1",
"name": "Timo"
},
]
}
Run Code Online (Sandbox Code Playgroud)
我的目标是让所有的聊天记录,其中在用户与签约userId是在chatMembers列表中。如果已userId登录用户的不在chatMembers属性中,则应忽略该聊天。这可能吗?
如果这不可能,那么我该如何通过子集合来实现呢?
我的开发语言是dart,但是您也可以发布其他语言的解决方案。
我目前的尝试是这样,但这不起作用:
_firestore.collection(collectionName).where("chatMembers.userId", isEqualTo: userId).snapshots()
Run Code Online (Sandbox Code Playgroud) 根据Cassandra文档,Cassandra中的隔离提供了行级隔离.这意味着对单个节点上单个分区内的行的写入仅对执行操作的客户端可见.
现在我假设在cassandra docs中写入它们意味着插入和更新.
我的问题是:
考虑我正在更新行的情况,同时其他用户也在更新同一行.现在由于Cassandra提供的隔离保证,我们无法确定更新行的最终状态.
从上面的陈述中可以看出我对Cassandra db中隔离的理解是否正确?