【学习笔记】范式与反范式

本文属于读书笔记,大部分内容摘抄于《高性能MYSQL》,摘抄内容版权属于原作者。

在对比这两者之前,首先我们需要温习一下范式和反范式的定义。

反范式定义: 反范式是通过增加冗余数据或数据分组来提高数据库读性能的过程。

在范式化的数据库中,每个事实数据会出现并且只出现一次,而在反范式化的数据库中,我们会在不同的表中存储同样的数据作为冗余信息。

范式和反范式都有优缺点:
范式
优点:
  1. 范式化的更新操作通常比反范式化要快。
  2. 当数据性能比较好的范式化,就只有很少或者没有重复数据,所以只需要修改更少的数据。
  3. 范式化的表通常更小,可以更好的放在内存,所以操作起来会更快。
  4. 很少有多余的数据意味着检索列表数据时更少需要DISTINCT或者GROUP BY语句。
缺点:
范式化的缺点也非常明显,那就是很多数据不能直接从一张表上查到,也就是必须做关联,稍微复杂一些的查询语句可能都要做一次以上的关联甚至更多。这不仅代价昂贵,也可能使得一些索引策略失效。

反范式
优点:
  1. 正好和范式反过来,因为有大量的冗余数据都在一张表中,可以很好的避免关联。因为不需要关联,那么即使在查询最差的情况下(无索引)全表扫描,当数据比内存大时这可能会比关联快得多,因为避免了随机I/O。
  2. 单独的表也能使用更好的索引策略。
缺点:
  1. 理所当然的会有大量冗余数据。
  2. 更新操作比范式慢。
  3. 数据同步需要花费。
  4. 可能需要多的用到DISTINCT和GROUP BY语句。

这是两种理想状况的分析,但是在实际应用中基本不会出现完全的范式化和完全的反范式化这些极端的情况。实际应用中经常需要混用,可能使用部分范式化的schema、缓存表,以及其他技巧。

最常见的反范式化数据的方法是复制或者缓存,在不同的表中存储相同的特定列。在mysql5.0和更新版本中,可以使用触发器更新魂村支,这使得实现这样的方案变得更加简单。

而从附表冗余一些数据到子表也会更高效的执行排序。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Unity ECS(Entity Component System)是Unity引擎的一种编程范式,它是一种数据驱动的编程模型,它将游戏对象(Entity)分解为数据和行为两个部分,其中数据由组件(Component)来表示,行为则由系统(System)来实现。相对于传统的面向对象编程模型,ECS提供了更高效、更灵活的编程方式,可以有效地提高游戏的性能和扩展性。 下面是我学习Unity ECS时的笔记: ## Entity Entity是ECS中最基本的概念,它表示游戏对象。每个Entity由一个唯一的ID来标识,可以通过EntityManager来创建、销毁、查询和管理Entity。 ## Component Component是Entity的数据部分,用来描述Entity的属性和状态。每个Component包含一些数据成员和一些方法,用来操作这些数据成员。Component是以结构体(struct)的形式定义的,通常只包含数据成员,不包含方法。 ## System System是Entity的行为部分,用来实现游戏逻辑和操作Component。System可以访问和操作EntityManager和Component,但不能直接访问Entity。每个System包含一个或多个Component,表示它所处理的数据类型。System是以类(class)的形式定义的,通常包含一个Update方法,用来实现游戏逻辑。 ## Job Job是一种轻量级的线程,用于并行执行System中的任务。Job可以访问和操作Component,但不能直接访问Entity和EntityManager。Job通常是以结构体(struct)的形式定义的,不包含方法。 ## Archetype Archetype是Entity的集合,包含一组具有相同Component类型的Entity。Archetype可以用来优化数据的访问和处理,可以在不同的System之间共享。 ## Chunk Chunk是Archetype中的数据块,包含一组连续的Entity和它们的Component数据。Chunk可以用来优化内存的分配和访问,可以在Job中进行并行处理。 ## Buffer Buffer是一种Component类型,用来存储可变长度的数据,例如数组或列表。Buffer可以在System和Job中进行修改和访问。 以上是我学习Unity ECS时的笔记,希望对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值