【完结11章】技术大牛成长课,从0到1带你手写一个数据库系统

笑面虎
• 阅读 235

【完结11章】技术大牛成长课,从0到1带你手写一个数据库系统【完结11章】技术大牛成长课,从0到1带你手写一个数据库系统

给大家分享一套数据库课程——技术大牛成长课,从0到1带你手写一个数据库系统,课程已完结,共11章,附源码。

数据库系统是为适应数据处理的需要而发展起来的一种较为理想的数据处理系统,也是一个为实际可运行的存储、维护和应用系统提供数据的软件系统,是存储介质 、处理对象和管理系统的集合体。 如果分片数据损坏,无法修复,比如某个磁盘坏了,这时候数据无法修复,为了恢复索引状态,可以允许分片的数据丢失,后续通过上层数据来重建索引,这时候我们可以增加 accept_data_loss参数来允许分片数据丢失 POST /_cluster/reroute { "commands": [ { "move": { "index": "test_index", "shard": 1, "from_node": "node1", "to_node": "node2", "accept_data_loss" : true } } ] }

数据库研究跨越于计算机应用、系统软件和理论三个领域,其中应用促进新系统的研制开发,新系统带来新的理论研究,而理论研究又对前两个领域起着指导作用。数据库系统的出现是计算机应用的一个里程牌,它使得计算机应用从以科学计算为主转向以数据处理为主,并从而使计算机得以在各行各业乃至家庭普遍使用。在它之前的文件系统虽然也能处理持久数据,但是文件系统不提供对任意部分数据的快速访问,而这对数据量不断增大的应用来说是至关重要的。为了实现对任意部分数据的快速访问,就要研究许多优化技术。这些优化技术往往很复杂,是普通用户难以实现的,所以就由系统软件(数据库管理系统)来完成,而提供给用户的是简单易用的数据库语言。由于对数据库的操作都由数据库管理系统完成,所以数据库就可以独立于具体的应用程序而存在,从而数据库又可以为多个用户所共享。因此,数据的独立性和共享性是数据库系统的重要特征。数据共享节省了大量人力物力,为数据库系统的广泛应用奠定了基础。数据库系统的出现使得普通用户能够方便地将日常数据存入计算机并在需要的时候快速访问它们,从而使计算机走出科研机构进入各行各业、进入家庭。 如果仅仅是考虑存储空间,更建议通过设置更高级别的索引压缩存储方式来减少对对磁盘空间的消耗,也能有大约30%的空间节省。设置方式如下: PUT test-index { "settings": { "index.codec":"best_compression" } }

可以只保存原始文档的一部分到_source里面吗? 可以,ES提供了过滤规则,可以只将一部分字段存入_source中。 如果不存储_source或仅存储部分内容,可以大量减小ES的存储占用量。

PUT test-index { "mappings": { "_source": { "enabled": false } } }

PUT test-index { "mappings": { "_source": { "excludes": [ "name" ] } } } PUT logs { "mappings": { "_source": { "includes": [ ".count", "meta." ], "excludes": [ "meta.description", "meta.other.*" ] } } }

PUT logs/_doc/1 { "requests": { "count": 10, "foo": "bar" }, "meta": { "name": "Some metric", "description": "Some metric description", "other": { "foo": "one", "baz": "two" } } }

GET logs/_search { "query": { "match": { "meta.other.foo": "one" } } } 查询返回的结果为:{ "took" : 22, "timed_out" : false, "_shards" : { "total" : 1, "successful" : 1, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : { "value" : 1, "relation" : "eq" }, "max_score" : 0.2876821, "hits" : [ { "_index" : "logs", "_id" : "1", "_score" : 0.2876821, "_source" : { "meta" : { "other" : { }, "name" : "Some metric" }, "requests" : { "count" : 10 } } } ] } }

数据的结构化,数据的共享性好,数据的独立性好,数据存储粒度小,数据管理系统,为用户提供了友好的接口。 数据库系统的核心和基础,是数据模型,现有的数据库系统均是基于某种数据模型的。 数据库系统的核心是数据库管理系统。 数据库系统一般由数据库、数据库管理系统(DBMS)、应用系统、数据库管理员和用户构成。DBMS是数据库系统的基础和核心。

数据库管理系统主要包括:进行数据定义语言以及翻译的相关程序,在这个部分的帮助下,可以让数据库的用户自行进行选择,并且也能得到翻译由此形成一个内部形式;进行数据运行控制的程序,因为这一程序的工作,让数据库中的资源可以充分得到管理,并且能实现关于数据的一种控制;数据库的实用程序则可以使得数据库在相对完整的基础上建立起来,并且在相对完整的数据库系统下让数据库得到维护。

数据冗余是指在多个表中重复存储相同的数据。虽然冗余数据可以提高数据检索和查询效率,但它也会占用更多的存储空间,并增加数据更新和维护的复杂度 更新异常是指在一个表中更新某些数据时,由于数据的冗余存储,可能会导致其他相关表中的数据不一致或出现错误 插入异常是指在向一个表中插入数据时,由于某些相关的数据还没有被插入,或者某些数据没有被正确地插入,导致插入操作无法完成或出现错误 删除异常是指在从一个表中删除某些数据时,由于数据的冗余存储,可能会导致其他相关表中的数据也被删除或者无法删除。这种情况下,可能会导致数据的丢失或数据不一致的问题。

管理fielddata 我们可以可以使用下面的api来清理索引的fielddata: POST /test-index/_cache/clear?fielddata=true 我们可以通过下面的api来查看集群中fielddata的使用情况 GET /_stats/fielddata?fields=* (包含集群元信息和每个索引的占用情况) GET /_nodes/stats/indices/fielddata?fields=* (所有索引的汇总情况) GET /_nodes/stats/indices/fielddata?level=indices&fields=* (每个索引单独占用情况) 我们可以配置fielddata内存限制,超出这个限制就清除内存中已有的fielddata数据。默认无限制,限制内存使用,但是会导致频繁evict(驱逐)和reload(重载),大量IO性能损耗,以及内存碎片和gc。

如果一次query load的fielddata超过总内存,就会发生内存溢出,circuit breaker会估算query要加载的fielddata大小,如果超出总内存,就短路,query直接失败。

可通过下列配置进行限制,注意,下面的配置都是针对节点级别的 1.fielddata的内存限制,默认堆内存的40% indices.breaker.fielddata.limit:40%

2.各种查询聚合操作的内存限制,默认堆内存的60% indices.breaker.request.limit:60%

3.总的jvm限制,包括但不限于上面两个,默认95% indices.breaker.total.limit:95% 如果indices.breaker.total.use_real_memory设置为false,这个值默认是75%

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
2年前
Mysql(14):数据库基础
2018/1/3一、数据库系统数据库系统(DatabaseSystem,DBS),是由数据库及其管理软件组成的系统。    数据库系统是为适应数据处理的需要而发展起来的一种较为理想的数据处理系统,也是一个为实际可运行的存储、维护和应用系统提供数据的软件系统,是存储介质、处理对象和管理系统的集合体。!(http
赵颜 赵颜
5个月前
[完结11章]技术大牛成长课,从0到1带你手写一个数据库系统
学习地址1:https://pan.baidu.com/s/1OWDu5fNqBXRUbLGrxzpJw提取码:tjty学习地址2:https://share.weiyun.com/Tp6ewDIJ密码:6crcwd今天跟大家交流一下关于开发一款数据库系统
荀勗 荀勗
5个月前
[完结11章]技术大牛成长课,从0到1带你手写一个数据库系统分享学习
大家好,今天我将给大家分享关于如何开发一个数据库系统的知识,将从0到1手把手带着一步步去开发这个项目,希望我的分享对大家的学习和工作有所帮助,如果有不足的地方还请大家多多指正。一、什么是数据库系统数据库系统一般由数据库、数据库管理系统(及其开发工具)、应用
吉太 吉太
5个月前
技术大牛成长课,从0到1带你手写一个数据库系统(完结11章)
关于数据库系统的开发一直以来都是一个难点,它的流程复杂,涉及到的技术点众多,特别在部署这块尤为重要,今天就带着大家手把手去实现这样一个数据库系统项目。我将从理论结合实际场景综合性落地,让大家轻松吃透核心技术底层原理。首先是应用场景这块:复用到日常开发场景中
笑面虎 笑面虎
4个月前
【完结14章】鸿蒙系统实战短视频App 从0到1掌握HarmonyOS
【完结14章】鸿蒙系统实战短视频App从0到1掌握HarmonyOS给大家分享一套视频课程——鸿蒙系统实战短视频App从0到1掌握HarmonyOS,已完结14章,附源码。大家下载学习。华为鸿蒙系统是一款全新的面向全场景的分布式操作系统,创造一个超级虚拟终
笑面虎 笑面虎
4个月前
基于C++从0到1手写Linux高性能网络编程框架(2023新课)
基于C从0到1手写Linux高性能网络编程框架(2023新课)分享课程——基于C从0到1手写Linux高性能网络编程框架,2023年新课,附源码电子书,课程包更新。Linux在服务器领域有着强大的优势,网络编程便是其中一项重要组成部分,运用合理的
笑面虎 笑面虎
4个月前
【完结9章】AI大语言模型 ChatGPT从0到1打造私人智能英语学习助手
【完结9章】AI大语言模型ChatGPT从0到1打造私人智能英语学习助手视频课程分享——AI大语言模型ChatGPT从0到1打造私人智能英语学习助手,完结19章。附源码下载。深度学习的子领域中有两个重要的概念:大型语言模型(LLMs)和生成式人工智能(Ge
笑面虎 笑面虎
4个月前
【15章】前端高手特训 从0到1带你手写一个微信小程序底层框架
【15章】前端高手特训从0到1带你手写一个微信小程序底层框架视频课程分享——前端高手特训从0到1带你手写一个微信小程序底层框架,课程包更新,附源码。大家下载学习。微信小程序实质上是一款基于web技术的应用程序,他和我们平常所接触到的前端网页是大同小异的。相
笑面虎 笑面虎
4个月前
【完结12章】基于C++从0到1手写Linux高性能网络编程框架
【完结12章】基于C从0到1手写Linux高性能网络编程框架分享一套课程——基于C从0到1手写Linux高性能网络编程框架,已完结12章,附源码电子书。大家下载学习。Socket网络编程框架Socket(套接字)是一个网络编程概念,描述了一个通信
笑面虎 笑面虎
4个月前
基于SpringBoot3.x+Vue3.x整合从0到1一步一步实现酒店管理系统
基于SpringBoot3.xVue3.x整合从0到1一步一步实现酒店管理系统给大家分享一套课程——基于SpringBoot3.xVue3.x整合从0到1一步一步实现酒店管理系统,附源码笔记数据库脚本下载。Spring框架是Java平台上的一种开源