首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么推荐数据库使用外键?

我的经验告诉我,很多数据库(大多数我曾经使用的)包含外键时并不总是一件坏事。在这篇文章中,我想把重点放在为什么的原因上。 为什么这是一个问题?...2.表格关系不清晰 数据库中缺少外键的另一个不太明显的负面影响是,不了解该模式的人很难找到正确的表并找出表关系。这可能会导致严重的数据库查询和报告问题。 为什么数据库可以没有外键?...1.性能 在表上拥有活动的外键可以提高数据质量,但会影响插入、更新和删除操作的性能。在这些任务之前,数据库需要检查它是否违反数据完整性。这就是为什么一些架构师和DBA完全放弃外键的原因。...这些工具负责参照完整性,并与RDBMS一起创建更高级别的数据库引擎。这些框架可以自己创建数据库表,而总是创建外键。使用这些工具的开发人员很少会干扰自动生成的模式,并且不需要外键。...一些架构师和数据库管理员只是忽略了这一部分。 9.保持模型的秘密 也许这是一个很遥远的问题,但也许有时候是因为人们希望别人知道太多太容易。一般来说,人们希望被需要和不可替代。

1.8K20

为什么 Redis 立刻删除已经过期的数据

为什么立刻删除?答案就是做不到,或者即便能做到,代价也太高。最简单的做法就是每一个 key 启动一个定时器,到时间了就删掉。但是这里会有 2 个问题。...为什么要随机抽样,同一个 DB 内按照顺序遍历下去不就可以吗 ?确保每个 key 都能遍历到。随机只是为了保证每个 key 都有一定概率被抽查到。...RDB 简单来说就是快照文件,也就是当 Redis 执行 SAVE 或者 BGSAVE 命令的时候,就会把内存里的所有数据都写入 RDB 文件里。...后续主库可以载入这个文件来恢复数据,从库也可以利用这个文件来完成数据同步。对于 RDB 来说,一句话总结就是主库不读写,从库原封不动。也就是说,在生成 RDB 的时候,主库会忽略已经过期的 key。...Redis 用这个文件来逐条记录执行的修改数据的命令。不管 Redis 是定期删除,还是懒惰删除过期 key,Redis 都会记录一条 DEL 命令。

2K31
您找到你想要的搜索结果了吗?
是的
没有找到

Python香吗,为什么还要学数据分析?

1 为什么要学数据分析 有读者问我,看到现在大厂都在招数据分析师,薪资也非常有吸引力,我会用 SQL 和 Excel,还会一点 Python,能不能去应聘?...一个专业的数据分析师在对业务做数据分析时,流程一般为: 定义问题 搭建框架 数据提取 数据清洗 数据分析 数据可视化 总结建议 如果没有遵循这样的流程,那得出的报告,往往只能得出结论,顶多定位到问题——...因此,定义问题、分析数据及总结建议,才是数据分析师的核心价值所在,也是无数数据分析师仍在持续学习的原因。...下图是数据分析流程中所需要的能力及工具,可以看到,SQL 和 Excel 只能完成数据提取和数据清洗,现在大热的 Python,也仅能做到数据清洗和可视化。 ?...而且和看视频一样,自学往往依旧偏重于工具、理论的学习,无法结合真实场景,容易出现纸上谈兵的现象,推荐用这种方式。 最后谈一下培训课程。

97720

小弟问我:为什么MySQL建议使用delete删除数据

骂归骂,事情还是得解决,时候我分析原因发现,发现有些表的数据量增长很快,对应SQL扫描了很多无效数据,导致SQL慢了下来,通过确认之后,这些大表都是一些流水、记录、日志类型数据,只需要保留1到3个月,此时需要对表做数据清理实现瘦身...这篇文章我会从InnoDB存储空间分布,delete对性能的影响,以及优化建议方面解释为什么建议delete删除数据。 InnoDB存储架构 ?...物理上主要由系统用户数据文件,日志文件组成,数据文件主要存储MySQL字典数据和用户数据,日志文件记录的是data page的变更记录,用于MySQL Crash时的恢复。...系统表空间: 主要存储MySQL内部的数据字典数据,如information_schema下的数据。...每个服务对应一个数据库,为该数据库创建单独账号,同时只授予DML权限且没有delete权限,同时禁止跨库访问。

4.2K21

为什么建议把数据库部署在docker容器内?

为了避免数据丢失,用户可以使用数据卷挂载来存储数据。但是容器的 Volumes 设计是围绕 Union FS 镜像层提供持久存储,数据安全缺乏保证。如果容器突然崩溃,数据库未正常关闭,可能会损坏数据。...另外,容器里共享数据卷组,对物理机硬件损伤也比较大。 即使你要把 Docker 数据放在主机来存储 ,它依然不能保证数据。...然而在 Docker 中水平伸缩只能用于无状态计算服务,数据库并不适用。 我们没有看到任何针对数据库的隔离功能,那为什么我们应该把它放在容器中呢? 6、云平台的不适用性 大部分人通过共有云开始项目。...当我们可以迅速启动一个实例的时候,为什么我们需要担心这个实例运行的环境? ? 这就是为什么我们向云提供商支付很多费用的原因。当我们为实例放置数据库容器时,上面说的这些便利性就不存在了。...因为数据匹配,新实例不会与现有的实例兼容,如果要限制实例使用单机服务,应该让 DB 使用非容器化环境,我们仅仅需要为计算服务层保留弹性扩展的能力。

5.4K30

为什么建议把数据库部署在Docker容器内?

为了避免数据丢失,用户可以使用数据卷挂载来存储数据。但是容器的 Volumes 设计是围绕 Union FS 镜像层提供持久存储,数据安全缺乏保证。如果容器突然崩溃,数据库未正常关闭,可能会损坏数据。...另外,容器里共享数据卷组,对物理机硬件损伤也比较大。 即使你要把 Docker 数据放在主机来存储 ,它依然不能保证数据。...然而在 Docker 中水平伸缩只能用于无状态计算服务,数据库并不适用。 我们没有看到任何针对数据库的隔离功能,那为什么我们应该把它放在容器中呢? 6、云平台的不适用性 大部分人通过共有云开始项目。...当我们可以迅速启动一个实例的时候,为什么我们需要担心这个实例运行的环境? 这就是为什么我们向云提供商支付很多费用的原因。当我们为实例放置数据库容器时,上面说的这些便利性就不存在了。...因为数据匹配,新实例不会与现有的实例兼容,如果要限制实例使用单机服务,应该让 DB 使用非容器化环境,我们仅仅需要为计算服务层保留弹性扩展的能力。

91620

首次揭秘,字节跳动数据平台为什么选“纯中台制”

面对个性化、多样化数据,以及企业内部的数据孤岛和业务孤岛,如果有一套能够处理海量数据的基础设施,那么在很大程度上可以挖掘并分析出对业务发展有价值的信息,从而帮助企业更快地作出数据驱动的决策,更快地推出适应用户...这样的规模在业界也十分罕见,为了应对大规模的数据量,字节跳动数据平台团队没有采用传统的数据中台模式,而采用了“中台 +BP 制”模式,避免中台脱离业务需求。...作为数据平台能力的解决方案提供方,数据 BP 同学在组织上都汇报在数据平台,统一培养和调度,相互学习经验的角度,对中台能力也保证足够的熟悉度,以便根据不同业务的特性,灵活组合,提供综合性的数据解决方案,...决策敏捷:这是字节典型的 A/B 测试文化,“遇事决用 A/B”,用客观代替主观,辅助一线快速决策,而不是依靠冗长的层层拍板的办法。这也使得我们的 A/B 产品每天同时进行的测试就达上万场。...其中 ByteHouse 是我们今年 8 月刚对外推出的,性能和规模在国内都比较领先; 数据建设部分,主要是 DateLeap,融合了数据的定义、采集、验证、分流、治理等一站式数据开发治理平台; 数据应用部分主要分为

86930

为什么MOBA、“吃鸡”游戏推荐用tcp协议——实测数据

作者:腾讯云游戏行业资深架构师 余国良 MOBA类和“吃鸡”游戏为什么对网络延迟要求高? 我们知道,不同类型的游戏因为玩法、竞技程度不一样,采用的同步算法不一样,对网络延迟的要求也不一样。...类似地,“吃鸡”游戏(如《绝地求生》)玩法对玩家坐标、动作的同步要求极高,延迟稍大导致的数据不一致对体验都会造成较大影响,其实时性要求接近MOBA类游戏。...相比之下,对于炉石传说、斗地主、梦幻西游等回合制游戏来说,同时只有一个玩家在操作双方数据,无数据竞争,且时间粒度较粗,甚至可通过特效掩盖延迟,因此对网络延迟的要求不高,即便延迟达到500ms~1000ms...其中,quic是源自google的tcp替代方案,其主要目的是为了整合TCP协议的可靠性和udp协议的速度和效率,其主要特性包括:避免前序包阻塞、减少数据包、向前纠错、会话重启和并行下载等,然而QUIC...总结 测试结果符合预期,在实时性方面,TCP协议的网络抗性欠佳,对MOBA类或其他实时性要求较高的游戏,我们建议使用TCP作为协议载体。

17.1K90

为什么建议把数据库部署在Docker容器内?

为了避免数据丢失,用户可以使用数据卷挂载来存储数据。但是容器的 Volumes 设计是围绕 Union FS 镜像层提供持久存储,数据安全缺乏保证。如果容器突然崩溃,数据库未正常关闭,可能会损坏数据。...另外,容器里共享数据卷组,对物理机硬件损伤也比较大。 即使你要把 Docker 数据放在主机来存储 ,它依然不能保证数据。...然而在 Docker 中水平伸缩只能用于无状态计算服务,数据库并不适用。 我们没有看到任何针对数据库的隔离功能,那为什么我们应该把它放在容器中呢? 6、云平台的不适用性 大部分人通过共有云开始项目。...当我们可以迅速启动一个实例的时候,为什么我们需要担心这个实例运行的环境? 这就是为什么我们向云提供商支付很多费用的原因。当我们为实例放置数据库容器时,上面说的这些便利性就不存在了。...因为数据匹配,新实例不会与现有的实例兼容,如果要限制实例使用单机服务,应该让 DB 使用非容器化环境,我们仅仅需要为计算服务层保留弹性扩展的能力。

1.3K10

为什么建议把数据库部署在docker容器内?

当容器被rm掉,容器里的数据将会丢失。为了避免数据丢失,用户可以使用数据卷挂载来存储数据。但是容器的 Volumes 设计是围绕 Union FS 镜像层提供持久存储,数据安全缺乏保证。...如果容器突然崩溃,数据库未正常关闭,可能会损坏数据。另外,容器里共享数据卷组,对物理机硬件损伤也比较大。 即使你要把 Docker 数据放在主机来存储 ,它依然不能保证数据。...然而在 Docker 中水平伸缩只能用于无状态计算服务,数据库并不适用。 我们没有看到任何针对数据库的隔离功能,那为什么我们应该把它放在容器中呢? 6、云平台的不适用性 大部分人通过共有云开始项目。...当我们可以迅速启动一个实例的时候,为什么我们需要担心这个实例运行的环境? 微信图片_20200808204051.jpg 这就是为什么我们向云提供商支付很多费用的原因。...因为数据匹配,新实例不会与现有的实例兼容,如果要限制实例使用单机服务,应该让 DB 使用非容器化环境,我们仅仅需要为计算服务层保留弹性扩展的能力。

2.9K00

单机单节点 MongoDB 为什么删除数据释放空间?

这个引擎有一个特点,就是删除数据释放空间。例如现在你的一个集合里面有 10000000 条数据,占用 10GB 的硬盘空间。你把其中的 9999999 条数据都删了,占用空间仍然是 10GB。...如果你想释放空间,最直接的方法是删除整个集合(Drop Collection)或者删除整个数据库(Drop Database)。...如果你的 MongoDB 版本小于 4.4,但是大于等于 3.6,那么虽然删除了数据,磁盘空间不会释放,但当你插入新的数据时,MongoDB 会重用之前占有的空间,而不会继续额外占用新的磁盘空间。...例如你的集合有 10GB,你删除了 9999999 条数据,接下来,在你新插入的数据总大小超过 10GB 前,MongoDB 都不会申请额外的硬盘空间。...这里显示的数据就是当前集合可重用的空间大小。如下图所示。

2.2K30

为什么数据库连接池采用IO多路复用?

这到底是为什么? 常见的误解 IO多路复用听上去好像是多个数据可以共享一个IO(socket连接),实际上并非如此。...为什么DB连接不能放到IO多路复用里一并执行吗? 答案是,可以用IO多路复用——但是「使用JDBC不行」。...只不过对于IO多路复用,数据库官方似乎都没做这种支持——他们只支持JDBC、ODBC等等这些标准协议。 那么为什么基于 IO 多路复用的实现不能成为默认的? 对于数据库开发者来说。...这样一来就会打破一般 Web 服务一个请求处理用一个线程的一般做法,会让程序边的更复杂——你的业务代码和DB查询之间必须做跨线程数据交换。 相反,连接池的实现就相对独立的多,也简单的多。...那么为什么基于 IO 多路复用的实现不能成为默认的? 批处理数据分析代码都是这样的场景。这样的程序写成NIO就会得不偿失——代码不容易懂,也没有任何效率上的优势。

66220

为什么数据库连接池采用IO多路复用?

导读:今天我们聊一个不常见的 Java 面试题:为什么数据库连接池采用 IO 多路复用?总结本篇文章希望对从事相关工作的同学能够有所帮助或者启发 。 前言 这是一个非常好的问题。...这到底是为什么? 常见的误解 IO多路复用听上去好像是多个数据可以共享一个IO(socket连接),实际上并非如此。...为什么DB连接不能放到IO多路复用里一并执行吗? 答案是,可以用IO多路复用——但是「使用JDBC不行」。...只不过对于IO多路复用,数据库官方似乎都没做这种支持——他们只支持JDBC、ODBC等等这些标准协议。 那么为什么基于 IO 多路复用的实现不能成为默认的? 对于数据库开发者来说。...那么为什么基于 IO 多路复用的实现不能成为默认的? 批处理数据分析代码都是这样的场景。这样的程序写成NIO就会得不偿失——代码不容易懂,也没有任何效率上的优势。

98710

为什么我的数据按顺序排序原来如此 | Java Debug 笔记

我的接口返回的数据顺序总是固定问题描述====我在开发突发奇想。将表头信息也给查出来一并返回给前端了。但是正因为这一举动却带来嘲讽。...刚入行那会一直都是使用Mybatis 框架实现数据的获取的。突然接到一个需求是要求将数据列按照一定顺序返回。前端直接按照我返回的顺序进行渲染。刚接到需求觉得很简单,将数据依次写入就行了。...当遇到有纵向数据是在纵向遍历。...决定一探究竟为什么LinkedHashMap 可以实现按照写入顺序排序。通过结构图我们清楚看到他是HashMap的子类。所以他的存储结构和HashMap基本上是一样的。...在每次通过HashMap put进数据之后会将当前添加进来的数据和上次添加的node进行链表关联。这样就使其都在一条链上我们上面添加的数据最终其内部一个结构图如下当然内部会有一个默认的节点作为头结点。

12410

一文一点 | 为什么建议使用数据库外键

用外键不好么,不太好,但也注意,不是不可以,是建议。 那么这里的建议,其实也有两说的。 1、如果你为了追求正确性优先于性能的话,可以使用。...那么外键为什么有性能问题呢 1、数据库需要额外的维护外键自身的内部管理; 2、外键相当于把数据的一致性事务的实现,全部交给了数据库服务器来完成; 3、有了外键以后,当做一些涉及到外键字段的增,删,改操作时...,需要触发相关操作去检查,而不得不消耗资源; 4、每次更新数据,都需要额外的检查另外一张表的数据,容易造成死锁; 总结: 1、互联网行业场景中推荐使用外键,用户量大,并发度高,如果使用外键,数据库服务器很容易产生性能瓶颈...2、传统行业可以使用,强调数据强一致性,而且用户数量有限,可控。 基于此,互联网场景中都是建议使用外键的,外键与级联更新适用于单机低并发,不适合分布式、高并发集群。...有了这个约束的存在,原则上就能保证表与表之间数据“始终完整、一致”的关系。 但是在我们平时的实际需求中,通常保证“最终完整、一致” 就可以了,甚至可以容忍一些 “最终不完整、不一致”。

1.1K20

面试题:为什么数据库连接池采用 IO 多路复用?

为什么数据库连接池采用 IO 多路复用? 这是一个非常好的问题。IO多路复用被视为是非常好的性能助力器。...这到底是为什么? 首先纠正一个常见的误解。IO多路复用听上去好像是多个数据可以共享一个IO(socket连接),实际上并非如此。...为什么并发查询一定要使用多个连接才能完成呢?因为DB一般是使用连接作为Session管理的基本单元。在一个连接中,SQL语句的执行必须是串行、同步的。...只不过对于IO多路复用,数据库官方似乎都没做这种支持——他们只支持JDBC、ODBC等等这些标准协议。 那么为什么基于 IO 多路复用的实现不能成为默认的,官方的,而要成为偏门呢?...对于数据库开发者来说。这种用法在整体的用户里占有量非常小,所以也许不值当的花大力气。

59310

虾皮二面:为什么数据库连接池采用 IO 多路复用?

Java面试指南网站:javaguide.cn 今天我们聊一个不常见的 Java 面试题:为什么数据库连接池采用 IO 多路复用? 这是一个非常好的问题。IO多路复用被视为是非常好的性能助力器。...这到底是为什么? 首先纠正一个常见的误解。IO 多路复用听上去好像是多个数据可以共享一个 IO(socket 连接),实际上并非如此。...为什么并发查询一定要使用多个连接才能完成呢?因为 DB 一般是使用连接作为 Session 管理的基本单元。在一个连接中,SQL 语句的执行必须是串行、同步的。...只不过对于 IO 多路复用,数据库官方似乎都没做这种支持——他们只支持 JDBC、ODBC 等等这些标准协议。 那么为什么基于 IO 多路复用的实现不能成为默认的,官方的,而要成为偏门呢?...对于数据库开发者来说。这种用法在整体的用户里占有量非常小,所以也许不值当的花大力气。

48730

【愚公系列】2023年03月 其他-Web前端基础面试题(react专项_35道)

10、为什么直接更新state状态 11、React中的这三个点(...)是做什么的 12、简单介绍下react hooks 产生的背景及 hooks的优点 13、 React hooks 怎么模拟生命周期...20、常用的hooks 21、为什么浏览器无法阅读JSX? 22、什么是高阶成分(HOC)? 23、React的严格模式如何使用,有什么用处? 24、React中什么是受控组件和非控组件?...: componentWillReceiveProps:组件将要接收到属性的时候调用 shouldComponentUpdate:组件接受到新属性或者新状态的时候(可以返回 false,接收数据更新...React在不使用JSX的情况下一样可以工作,然而使用JSX可以提高组件的可读性,因此推荐使用JSX 10、为什么直接更新state状态 如果直接更新state状态,那么它将不会重新渲染组件,而是使用...,单独处理数据的逻辑信息 21、为什么浏览器无法阅读JSX

7.6K10
领券