标签: non-relational-database

为什么我应该使用基于文档的数据库而不是关系数据库?

为什么我应该使用像CouchDB这样的基于文档的数据库而不是使用关系数据库.是否存在基于文档的数据库比关系数据库更适合的典型应用程序或域?

database couchdb relational non-relational-database

183
推荐指数
5
解决办法
4万
查看次数

存储时间序列数据,关系数据还是非数据?

我正在创建一个系统,使用SNMP以(可能)5分钟的间隔轮询设备以获取有关各种指标的数据,例如CPU利用率,磁盘利用率,温度等.最终目标是以时间序列图的形式为系统用户提供可视化.

我已经看过了,在过去使用的RRDTool,但拒绝了它作为存储捕获的数据无限地将我的项目很重要,我想更高层次和更灵活的访问捕获的数据.所以我的问题是:

什么是更好的关系数据库(如MySQL或PostgreSQL)或非关系数据库或NoSQL数据库(如MongoDB或Redis)在查询数据进行图形处理时的性能.

相关的

给定一个关系数据库,我将使用一个data_instances表,其中将存储为所有设备测量的每个度量捕获的每个数据实例,并包含以下字段:

领域: id fk_to_device fk_to_metric metric_value timestamp

当我想在特定设备上绘制特定指标的图形时,我必须查询此单个表,过滤掉其他设备,以及为此设备分析的其他指标:

SELECT metric_value, timestamp FROM data_instances
    WHERE fk_to_device=1 AND fk_to_metric=2
Run Code Online (Sandbox Code Playgroud)

此表中的行数为:

d * m_d * f * t
Run Code Online (Sandbox Code Playgroud)

其中d是的数量的装置,m_d是累计度量的数目被记录为所有设备,f频率在其中数据被轮询和t是总量时间系统已收集数据.

对于一年中每5分钟记录3个设备的10个度量标准的用户,我们将有不到500万条记录.

索引

没有索引fk_to_device并且fk_to_metric扫描这个不断扩展的表将花费太多时间.因此,索引上述字段以及timestamp(用于创建具有本地化期间的图表)是必需的.

非关系(NoSQL)

MongoDB具有集合的概念,与表不同,这些可以在没有设置的情况下以编程方式创建.有了这些,我可以为每个设备划分数据存储,甚至为每个设备记录每个指标.

我没有使用NoSQL的经验,也不知道它们是否提供任何查询性能增强功能,例如索引,但是前一段提出在数据存储在NoSQL下的结构中进行大多数传统的关系查询工作.

未定

具有正确索引的关系解决方案是否会在一年内减少爬行?或者NoSQL方法的基于集合的结构(与我存储的数据的心智模型相匹配)是否提供了明显的好处?

database time-series non-relational-database relational-database nosql

177
推荐指数
3
解决办法
6万
查看次数

基于文档和基于键/值的数据库之间的区别?

我知道有三种不同的,流行的非SQL数据库类型.

  • 键/值:Redis,Tokyo Cabinet,Memcached
  • ColumnFamily:Cassandra,HBase
  • 文档:MongoDB,CouchDB

我已经阅读了很多关于它的博客而没有那么多了解.

我知道关系数据库,并掌握基于文档的数据库,如MongoDB/CouchDB.

有人能告诉我这些与名单上的两位前者之间的主要区别是什么?

couchdb non-relational-database mongodb cassandra redis

94
推荐指数
2
解决办法
5万
查看次数

关系数据库和非关系数据库之间有什么区别?

我知道像MySQL,PostgreSQL和MS SQL Server这样的解决方案是关系数据库系统,NoSQL,MongoDB等是非关系型DBMS.

但是,这两种系统有什么区别?

Layman条款是优选的.

谢谢.

non-relational-database relational-database

78
推荐指数
5
解决办法
10万
查看次数

下一代数据库

我正在学习传统的关系数据库(使用PostgreSQL)并进行一些研究我遇到了一些新类型的数据库.CouchDB,DrizzleScalaris仅举几例,下一个要处理的数据库技术是什么?

sql database non-relational-database nosql

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

关系数据库与维度数据库数据库有什么区别?

我正在尝试学习OLAP和数据仓库,我对关系和维度建模之间的区别感到困惑.维度建模基本上是关系建模,但允许冗余/非标准化数据?

例如,假设我有(产品,城市,#销售)的历史销售数据.我理解以下是关系的观点:

Product | City | # Sales
Apples, San Francisco, 400
Apples, Boston, 700
Apples, Seattle, 600
Oranges, San Francisco, 550
Oranges, Boston, 500
Oranges, Seattle, 600

虽然以下是更具维度的观点:

Product | San Francisco | Boston | Seattle
Apples, 400, 700, 600
Oranges, 550, 500, 600

但似乎两种观点仍然可以在相同的星型模式中实现:

Fact table: Product ID, Region ID, # Sales
Product dimension: Product ID, Product Name
City dimension: City ID, City Name

直到你开始向每个维度添加一些额外的细节,差异才会开始出现.例如,如果您也想跟踪区域,关系数据库往往会有一个单独的区域表,以便保持所有规范化:

City dimension: City ID, City Name, Region ID
Region dimension: Region ID, Region …

database database-design non-relational-database relational-database

32
推荐指数
4
解决办法
9万
查看次数

什么是非关系数据库的示例?他们在哪里/如何使用?

我一直在使用关系数据库,但最近才发现必须有其他类型的关系型数据库.

什么是非关系数据库的例子,以及它们在现实世界中的使用位置和方式?为什么要选择在关系数据库上使用非关系数据库?

编辑:答案中提到了另外两个类似的问题:

database non-relational-database

28
推荐指数
8
解决办法
4万
查看次数

对于N:M关系,MongoDB中级联删除的推荐等价物是什么?

假设以下"模式/关系"设计,使用级联删除操作删除处理删除的推荐做法是什么?

关系模式:

  +---------+                                    +--------+
  | Student |-*--------1-[Enrollment]-1--------*-| Course |
  +---------+                                    +--------+

MongoDB的:

  +---------+                    +--------+
  | Student |-*----------------*-| Course |
  +---------+                    +--------+

考虑到学生的课程招生的这一经典设计,具有学生,反之亦然课程集合似乎使用MongoDB的(即没有为关系/报名表)时是合适的数据模型.但是来自关系世界我应该如何处理删除课程的语义?也就是说,当删除课程时,也应删除所有"注册"记录.也就是说,我应该从每个学生记录的集合中删除该课程.看起来我必须触发2个查询:一个用于删除课程,然后从每个学生的集合中删除它.有没有办法让单个查询执行这种"级联删除",如语义而无需额外的查询?数据模型是否需要更改?

注意:对于所有其他用例,上述数据模型工作正常:

  • 删除学生=>只会删除该学生以及随之删除的相关课程集.
  • 愿意放弃课程=>的学生只需将其从学生课程集中删除即可
  • 添加学生/课程=>只是将其添加到相应的"表格"中.

唯一棘手的事情是处理删除课程.我应该如何处理MongoDB中的这种情况,因为我来自关系背景,我无法弄清楚这一点.

database database-design non-relational-database mongodb cascading-deletes

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

关系与非关系数据建模 - 有什么区别

我是数据库的新手,我从未使用过任何RDBMS.但是我得到了关系数据库的基本概念.至少我想我做;-)

假设我有一个用户数据库,每个用户都有以下属性:

  • 用户
    • ID
    • 名称
    • 压缩

关系数据库中,我将在一个名为的表中对其进行建模user

  • 用户
    • ID
    • 名称
    • LOCATION_ID

并有一个名为的第二个表 location

  • 地点
    • ID
    • 压缩

并且location_idlocation表中条目的外键(引用).如果我理解正确的优势就在这里,如果某个城市的邮政编码发生变化,我只需要改变一个条目.

那么,让我们去非关系型数据库,在那里我开始使用Google App Engine.在这里,我真的会对它进行建模,就像它在规范中首先写下来一样.我有一种user:

class User(db.Model):
    name = db.StringProperty()
    zip = db.StringProperty()
    city = db.StringProperty()
Run Code Online (Sandbox Code Playgroud)

优点是我不需要加入两个"表",但缺点是,如果邮政编码改变,我必须运行一个遍历所有用户条目并更新邮政编码的脚本,对吗?

因此,现在Google App Engine中还有另一个选项可供使用ReferenceProperties.我可以有两种:userlocation

class Location(db.Model):
    zip = db.StringProperty()
    city = db.StringProperty()

class User(db.Model):
    name = db.StringProperty()
    location = db.ReferenceProperty(Location)
Run Code Online (Sandbox Code Playgroud)

如果我没错,我现在拥有与上述关系数据库完全相同的模型.我现在想知道的是,首先,我所做的是错误的,这会破坏非关系型数据库的所有优点.我明白,为了获得zip和城市的价值,我必须运行第二个查询.但在另一种情况下,要对邮政编码进行更改,我必须运行所有现有用户.

那么这两种建模可能性在Google数据存储区等非关系数据库中的含义是什么呢?它们的典型用例是什么,这意味着何时我应该使用一个,另一个使用何时.

另外作为一个额外的问题,如果在非关系数据库中我可以建模与关系数据库中的模型完全相同的模型,为什么我应该使用关系数据库呢?

很抱歉,如果其中一些问题听起来很幼稚,但我相信他们会帮助一些对数据库系统不熟悉的人,以便更好地理解.

google-app-engine data-modeling non-relational-database relational-database

20
推荐指数
3
解决办法
8010
查看次数

在云中部署和托管scala?

我正在开始一个Web应用程序,将可伸缩性作为首要任务之一.这有什么好处:cassandra scala lift

与云上的传统LAMP相比?从我所读到的,请纠正我,云本身是可扩展的

我以前从未见过有人在云上部署scala.学习平台是否值得付出努力?它准备好用于生产吗?

cloud scala scalability non-relational-database

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