标签: relational-database

在关系数据库中存储分层数据有哪些选项?

好的概述

一般来说,您要在快速读取时间(例如,嵌套集)或快速写入时间(邻接列表)之间做出决定.通常,您最终会得到最适合您需求的以下选项组合.以下提供了一些深入阅读:

选项

我知道和一般的功能:

  1. 邻接清单:
    • 列:ID,ParentID
    • 易于实施.
    • 便宜节点移动,插入和删除.
    • 昂贵的找到水平,血统和后代,路径
    • 在支持它们的数据库中通过公用表表达式避免使用N + 1
  2. 嵌套集(又名修改的预订树遍历)
    • 列:左,右
    • 便宜的血统,后代
    • 非常昂贵的O(n/2)移动,插入,由于易失性编码而删除
  3. 桥表(又名闭包表/ w触发器)
    • 使用单独的连接表:祖先,后代,深度(可选)
    • 廉价的血统和后代
    • 写入O(log n)插入,更新,删除的成本(子树的大小)
    • 规范化编码:适用于连接中的RDBMS统计信息和查询规划器
    • 每个节点需要多行
  4. 谱系列(又名物化路径,路径枚举)
    • 专栏:血统(例如/父母/孩子/孙子/等......)
    • 廉价后代通过前缀查询(例如LEFT(lineage, #) = '/enumerated/path')
    • 写入O(log n)插入,更新,删除的成本(子树的大小)
    • 非关系型:依赖于Array数据类型或序列化字符串格式
  5. 嵌套间隔
    • 像嵌套集一样,但是使用实数/浮点数/小数,这样编码就不易变(廉价的移动/插入/删除)
    • 有实/浮/十进制表示/精度问题
    • 矩阵编码变体为"自由"添加了祖先编码(物化路径),但增加了线性代数的诡计.
  6. 平表
    • 修改的Adjacency List,为每条记录添加Level和Rank(例如排序)列.
    • 便宜迭代/分页
    • 昂贵的移动和删除
    • 好用:线程讨论 - 论坛/博客评论
  7. 多个谱系列
    • 列:每个谱系级别一个,指向根目录的所有父级,从项目级别向下的级别设置为NULL
    • 便宜的祖先,后代,水平
    • 便宜的插入,删除,移动的叶子 …

sql database tree relational-database hierarchical-data

1281
推荐指数
7
解决办法
23万
查看次数

何时以及为什么数据库加入昂贵?

我正在研究数据库,我正在研究关系数据库的一些局限性.

我得到大桌子的连接是非常昂贵的,但我不完全确定为什么.DBMS需要做什么才能执行连接操作,瓶颈在哪里?
非规范化如何帮助克服这种费用?其他优化技术(例如索引)如何帮助?

欢迎个人经历!如果您要发布资源链接,请避免使用Wikipedia.我知道在哪里找到它.

与此相关,我想知道云服务数据库(如BigTable和SimpleDB)使用的非规范化方法.看到这个问题.

database performance join denormalization relational-database

343
推荐指数
4
解决办法
7万
查看次数

334
推荐指数
8
解决办法
65万
查看次数

Laravel - Eloquent"Has","With","WhereHas" - 它们是什么意思?

我发现这些方法背后的概念和含义有点令人困惑,是否有人可以向我解释在一个例子(如果可能)的背景下,has和之间的区别with是什么?

orm relational-database relationship laravel eloquent

184
推荐指数
2
解决办法
17万
查看次数

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

我正在创建一个系统,使用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中是否重要?

无视性能,我会从下面的查询A和B得到相同的结果吗?C和D怎么样?

-- A
select *
from   a left join b
           on <blahblah>
       left join c
           on <blahblan>


-- B
select *
from   a left join c
           on <blahblah>
       left join b
           on <blahblan>  

-- C
select *
from   a join b
           on <blahblah>
       join c
           on <blahblan>


-- D
select *
from   a join c
           on <blahblah>
       join b
           on <blahblan>  
Run Code Online (Sandbox Code Playgroud)

sql join relational-database

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

NoSql vs Relational数据库

最近NoSQL获得了极大的欢迎.

NoSQL相对于传统RDBMS有哪些优势?

database rdbms database-design relational-database nosql

156
推荐指数
4
解决办法
11万
查看次数

简单来说3NF和BCNF之间的区别(必须能够解释为8岁)

我已经阅读了引用: 数据取决于键[1NF],整个键[2NF],只有键[3NF].

但是,我无法理解3.5NF或BCNF.这是我的理解:

  • BCNF比3NF更严格
  • 表中任何FD的左侧必须是超级键(或至少是候选键)

那么为什么有些3NF表不在BCNF中呢?我的意思是,3NF引用明确地说"除了密钥之外",意味着所有属性仅仅依赖于主键.毕竟,主键是候选键,直到它被选为我们的主键.

如果到目前为止我的理解有任何不妥之处,请纠正我并感谢您提供的任何帮助.

database relational-database 3nf database-normalization

148
推荐指数
6
解决办法
18万
查看次数

Use cases for NoSQL

NoSQL最近在我们的行业中受到了很多关注.我真正感兴趣的是关于人们对关系数据库存储使用的最佳用例的看法.什么应该引发开发人员认为特定数据集更适合NoSQL解决方案.我对MongoDBCouchDB特别感兴趣,因为他们似乎在PHP开发方面获得了最多的报道,这是我的重点.

sql couchdb relational-database mongodb nosql

143
推荐指数
5
解决办法
3万
查看次数

在SQL Server数据库中使用单行配置表.馊主意?

在开发购物车应用程序时,我发现我需要根据管理员的偏好和要求保存设置和配置.此信息可以是公司信息,运输帐户ID,PayPal API密钥,通知首选项等.

创建一个表来在关系数据库系统中存储单行似乎非常不合适.

存储此信息的适当方法是什么?

注意:我的DBMS是SQL Server 2008,编程层是用ASP.NET实现的(在C#中).

sql configuration database-design relational-database

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