大家好,今天讲一下这个数据库怎么表现。首先是我们使用的数据库,是你可以在设置里面看到数据库,是这个数据库,如果你要会更新的话,你可以直接更新对应的数据库就可以了。 然后如果你不会的话,你就可以使用我们软件里面的这个教程,一步一步更新。第一步的话我们就直接在官网里面下,然后这个数据服务里面查询中心里面,然后就这个界面,然后下载国内指标,你要下的是深圳上证的指标, 他一般是一年,但是你要超,你要一般情况下你就不需要改他时间,他一般都是给一年,但是你要注意这个时间是要超过你的。在你当前更新之前, 比如说我们现在是那个二 a 十三号,你要超过二 a 十三号,但是这个是一年,一般是一般是不需要,只是你太久没更新的时候你要注意,然后我们把它下载下来就可以,然后还要下一条是真正三九九这一条,三九九零幺这一条 真正指数这两条都要下载。然后我们打开我们的软件,然后点这个,这后面这个打勾,然后他会弹出这个路径,我们找到我们下载的这个路径,这两条打开来就可以了,他就会更新进来, 然后我们再更新这个股票的这个数据也是一样,就是把这个说说国内交易所的行情,就是打开这国内交易所行情,然后你打这个深,他一般是有两个上证和深圳,你刷新一下吧, 今天的,但是我们先要记住我们的浏览器是从十三号以后的开始算,十三号到今天的,我们就讲讲十三号到今天的,那就十三号,十三号、十四, 这个是这段时间的春节时间,一般是没数据,你可以随便看搜索一下,一般是没数据的,一般是二十三号开始有个数据搜索一下,嗯,也没有二十四号搜索一下,这数据来了, 然后你直接下载就可以了,然后再下载这个上海证券交易所,它会切换过来,切换过来你就下载就可以了,然后再往后加一点,比如加今天的, 你等它刷新了,嗯,它没刷新,那可能今天数据还没更新吧,我再试一下。哦,更新了,然后下载下来就可以了,然后再下载这个深圳交易所的, 这样哪个这样就下载下来了,然后,嗯,我们打开软件,然后打开这个股票这边, 你在后面打勾,然后把这个交易所数据给打开,所以不要打三,不要把相应数指数也给打进去。然后这里面打开的话,你要超过六十个的文件的时候,你要注意这个顺序, 因为他是这样子,他这他会分页六十个,六十个一页一页的。如果你超过六十个的话,然后他第一组数据如果是不全的话,他是不会更新,会中断,会有些异常,所以要注意顺序 这样子。但一般情况下不建议你超过六十个文件一起更新吧,就把这打开就可以了,他就更新进来了,然后下面是这个除权,这个更新 除权更新的话,我们是这个业绩分红,他是从这个数据服务器,然后统计中心里面,然后业绩有分红,然后报过去分红,然后你可以选择这个零报名出来商机度报 搜索一下,然后数据下载就可以了。然后一般你要跟这个分红的话,你要再往前下,多下载几个。比如说我们把半年报也给下下来,因为他这个半年报的分红就分红的 归属,他有的时候不一定就是你近期的归属,他不一定会归属的三级都爆,他也有可能就归属为半年爆,他有的时候会拖的比较久,所以说你最好是往前有的时候多下个两三个这样子,然后下完后的话我们就打开就可以了, 然后这个这两个你们只要把它打开就可以了。 嗯,之前可能没有分红,他没更新,那可能之前没有分红,因为可能才两天时间,这两天没发生分红,他就没有触发这个更新。呃,但是这里可能要提一下,后面可能不要忘了,就是我们下载这个分红数据。 嗯,你下载分红数据的时候有可能会出现, 就是有些某些天数他和一天的有多条分红,他有可能会被分到两个文件里面去,会导致你下载时候他会,你在更新这个分红的时候,他会给你提示,就是你现在数据跟那个数据库里面的数据不一样, 这种情况的话你就是检查一下他是不是出现那个那一天有多条分红,然后你这东西你要自己去核对一下这样子,然后还有个屁股,但屁股的数量非常少,屁股的数量一般一年就就那么几次,可以看一下, 看,你看这个,你看按这个时间牌,就这样二三年出现的,几年都没发生过 这配股这个更新的话,一般你自己留意一下,他很少更新,一般情况下你都不需要怎么关注这个吧?偶尔自己去看一下,因为这个个别的雏鸟看一下,就就这个意思吧。这一般这个东西配股很少更新, 然后你要更新这行情下面这个其他的基本信息的行情的时候,它的更新逻辑跟这两个上面这几个有点不大一样。它这个更新是你打开的类里面, 嗯,打开文件里面如果有某个类,然后你数据库里也有某个类的数据,它就会把它更新进去了。如果你数据库里面没有这个类,你文件里面有这个类,它是不会更新的。如果你要想创建一些类,就是数据这个,嗯,我们随便开一个吧, 开一个程序 就很多内免,你如果想增加这种内免的话,你要在数据库里要加对应的内免,它才能更新到里面,而且要要一致就是了。 对对,还有一点就是你更新完数据库的话,你会发现这个里面的数据是没有更新的。所以一般情况下你更新完数据库,你要重启,然后第一次重启的时候,它会更新缓存会比较慢, 就是你更新数据库后再重启,他会一般会比较慢。另外一点就是你从这边打,从这边这个数据库里面这个后面右边这个重新装载数据库就可以了,然后他更新一下,他就会那种更新过去。 但这个这个就正常,他在把数据库里面读到里面,然后把它适配到你这个缓存里面去,然后下次读就读缓存会快一点,然后这这样子这时间就多过来了, 但这东西发现不是很对齐,所以会导致你这个图层可能要删,可能要重新,那个你最好你是重重启一下,会简单一点的就更新完数据库,你最简单的重启一下,而万一每个图层都要重新创建。 还有一个关于这个除权,你要讲一下的一个问题,因为除权的话,现在主流软件里面有两种算法,我们可以看个例子, 比如说这个是写求的,我们与这个战国网页,我们会看到他九几年他出付钱出去的时候是正的,但是那个东财里面他是负的, 他一般现在除钱他有两种算法,就是有些东西会给你算到负数里面去,我们软件里面用的是不会算到负数,是用那种他的算法就直接又又把这钱买进去了,就是他这个涨幅比例就是始终是对的, 这意思他有些有可能是说你分红会扣一些东西出去这样子,然后说是他不会他我们的目前算法是不算到负数的, 因为有的时候你算到零的话,很多调整比例什么会比较麻烦,所以我们用的是这种付钱方式在做。然后你这个这个软件里面付不付钱,你直接一直控制,通过这个东西来控制的。然后算法里面付不付钱的话,是要乘以这个 d、 e、 x 这样子算法,它软件如果是说你打勾了这个付钱的话,它加载数据的时候,它会自动成这个东西,然后去算成付钱的价格,然后来显示这个数据, 这样子你要不想付钱的话,你要把这个拿掉,这个点掉就可以,但是正常是用付钱会,这会比较多,可能大概就讲这些吧。嗯,谢谢大家。
粉丝35获赞53

今天给大家汇报一个通达信数据转存本机数据库的一个部署方案啊,我之前我的这个本机这个数据库呢,一直是用的,用的啊 posgrid circle 这个数据库。 嗯,那已经有很多数据了,这段时间大家都知道我在搞这个通达信的这些数据吗? 呃,那之前的话呢,是把他的这个原始的日 k 线的数据和他的就是他的分红配股那些数据给他下载好了。呃,现在的话呢,因为涉及到两个问题哈。呃,往下做了两个问题,第一个呢就是把他的股本变迁就是他的那个 这个给他解解读出来了嘛,然后你要把它呃做成就是可以前赴权后赴权这样去查看嘛,这是一个工作。第二个工作呢,就是说 我们需要每天收完市之后啊,我们要把这个数据给它补充进去,做一个自动的任务,这样的话呢我们的数据就好了。我今天呢在在 github 上发现了这么一个项目啊,做,我做觉得做挺好的,然后我就把它改造了一下,相当于是说因为它原来的数据库跟我这数据对不上啊, 我就把这个数据库重新改成了我现在这个数据啊,改成这个数据库啊。另外一点呢,就是说 把我原来已有的表跟这个他目前这个体系做了一个合并啊。那现在目前来讲有这么些数据,就是第一个是日线的数据,这个是原始数据啊,就是相当于我们从那个上头下载下的原始数据。呃,那我们总共是保留了五年的数据吗?从二零二零年,这是一千多万条吗? 古本变迁,这个呢就是我们,呃上一个视频说到的,他就是要去要加密去解读的,呃那么一个东西就是他的分红啊那些数据,那后边这两个呢?呃相当于是我们要做一个负全因子啊,然后给他 在这个基础上进行计算完了之后啊存进去的。但是呢,嗯,我这个包括你看后面的话呢,我们这些都还没做啊,就是板块信息、成功信息,包括一分钟线、五分钟线这些都没做。没做是因为什么呢?是因为我这电脑的硬盘不够了, 你看我的 c 盘已经满了啊,我明天去阿里云那个服务器上重新再埋点硬盘空间, 呃,然后再把这个给他补充完整了。那目前来讲的话呢,就是这一套东西我觉得还是比较好的,首先呢它解决了很多问题啊。第一个, 呃就是我们能够有这种基础的行情的数据,然后能去查看,就像 同大信一样,能看到前夫权、后夫权的一些数据,另外也还有一些板块和板块的成分信息,这个其实很重要,对我来讲啊,因为我主要是用这块。那么呃后面的话呢,因为他一分钟线、五分钟线也可以去做的,相当于我们每天 去更新的时候,更新的时候他其实是通过呃这个去下载的,就这个去下载的就通达信这个网站上,我们呃现在这程序是直接从这里头去更新他的每天的这个数据的, 这样的话呢我们就能够保证,呃,如果你每天去让他更新一下这些一分钟线、五分钟线都可以下载的,其实那当然他需要更多的这个硬盘空间了,这是整个的一个工作。那等我这个 硬盘弄好了之后啊,我就把这个数据给他理顺了,理顺完了之后呢?相当于,呃,我们这套数据都放在本机上了,而且每天能够更新,那我们后续再做一些量化分析的话,就很容易很方便了。好,今天分享就这么多,谢谢大家。

经历了长达一个月的时间, maxwell 终于迎来了一点一零的版本,在这个版本主要更新了数据库卡片,这个卡片并不是像以往的笔记软件一样直接在标签里面去打开或者创建。试图 我把数据库单独做成了一个卡片,在这个卡片里面,你可以自由的去配置你要同步哪些盒子里面的这种卡片。 当你创建好一个数据库卡片之后,可以在右上角这里从盒子导入卡片,点击一下,然后这里就会弹出一个浮窗,你可以看到下面这里是因为我已经创建好了一个自动同步的配置。 任何卡片只要设置了 po 的 这个盒子,那么都会自动同步到这个数据库里面了。例如现在我打开了这个卡片,在笔记里面我们可以使用警号命令,在任意地方使用警号命令设置这个卡片的归属。盒子里面来来点击一下, 那么你会发现下面就自动同步进去了,他就同步到最下方了。数据库卡片提供了非常丰富的字段,也就是列,你可以在这个列头使用鼠标右键,也可以去点击这个拖拽图标 去在左侧或者右侧添加列,提供了非常丰富多的列。然后卡片列呢是固定的,他是不能被删除的,因为卡片他是作为一个唯一的键,一个唯一的标识一样的,他不会重复。 然后你也可以去冻结一个列,例如我现在水平的去滚动,你可以发现自动序号列和卡片列都是不会滚动的,他是固定在最左侧的,并且冻结一个列不是要求说一定要在最左侧,我可以跨,例如现在盒子这个列他并没有 冻结,但是我想冻结日期这个列,我鼠标右键点击冻结列,那么我滚动到又日期这个时候他也会自动的固定在左侧 中间没有冻结的这些列都不会影响的。盒子列是可以设置这个默认值的,这个默认值有什么用呢?我们在下面轻添加一行,然后我在这个单元格里面去新建一个卡片的话,它默认就会带上这个盒子列设置的预设值, 就这里我设置了两个默认值,那么我新建一张卡片,这个卡片它自动就会归属到这两个盒子里面来。关于添加行的操作,你可以在整个数据库的最下方这里来添加,也可以在左侧这里的拖拽图标点击或者右键 就可以很便捷的在上方下方插入一行或者 n 行,同时每一个列和每一个行你都可以设置它的列头的颜色,行首的颜色以及整一列整一行的颜色。 设置完了之后,你还可以单独的对某一个单元格来进行这个背景色的修改。除此之外,这个数据库还提供了非常方便的筛选功能和排序功能,我可以点击到这个筛选里面来。这个筛选的逻辑是非常丰富的, 你可以添加多个条件,每个条件之间你可以是全部匹配或者任意匹配,也就是 and 和 or 的 区别就是且或者或。例如这里我使用建立时间来筛选一下,使这个建立时间呢是在上个月,然后更新时间它是在本月的, 这样就筛选出来符合条件的这种卡片了,在这里还可以设置这个蓝 v 的 可见性,例如某些列我想隐藏掉,暂时不想看,例如这个自动序号列隐藏掉, 还有创建时间,建立时间隐藏掉,这都 ok 的, 然后你需要看的时候再给他点击展示就好了。除了表格式图,我们还提供了看板式图,你可以在右边的这个加号里面去创建看板式图。 开版式图呢,会要你选择一个分组的依据,其实开版式图里面每一列就是根据了某一个字段里面的值来进行分类的,例如这里是单选列,那么单选列里面呢?其实是只有选项一,选项二、选项三,这是你创建单选列之后的默认值,也是可以修改的。在表格式图里面,我们找到这个单 选列,这里的图标跟你自己默认创建的时候是不一样的,是因为在这个数据库里面,我们是支持修改每个字段的这个图标的, 我们点击右键可以看到这里有更改图标,你可以选择这个图标,也可以选择是 emoji 表情都是 ok 的。 包括里面的选项, 我们点击这里去编辑选项,或者我们到这个选项里面来选择选项的时候,也有个编辑选项,就可以打开这个橱窗,我们可以去修改它的图标,你也可以没有图标,然后修改它的名称,以及修改整个的选项的颜色,包括说修改图标的颜色都是可以的, 然后你可以拖拽调整这些选项的顺序,或你换一下都是 ok 的, 那么多选列也是同理的。 还有这个频分类,频分类默认呢,是五个星星,然后不长是半个星星,然后星星的数量是可以修改的,也是到这个列菜单里面来去设置最大的星数,根据你的需求去设置就好了。关于看板式图使用其实也就非常简单了, 在看板式图里面呢,默认只会展示这个卡片的信息,你需要展示其他的列信息的话,就到这个字典可见性里面去开关一下就好了。 然后拖拽的功能这里就不多介绍了,这个大家应该会比较熟悉,就你想把某一个卡片设置到某个选项里面,直接拖拽过去就好了。关于看板式图还有一个比较好的功能呢,就是可以设置它的布局,默认呢是水平方向排成一行, 然后你可以到这个布局设置里面来去设置一下是否只展示一行,可以关闭,然后你还可以选择是否以这种 瀑布流的布局,可以点击一下,你会发现他就是从下往上,从左往右的顺序来开始布局了,如果你的列数是零的话,默认他就会自动把这个列数排满,然后自动换行,你也可以自己去设置,说是想要一列两列三列都是 ok 的 列的宽度啊。这些各种选项的样式设置非常丰富, 如果不喜欢设设置错了,点击重置就可以回到默认的状态。除此之外,本次更新呢,还对这个卡片盒的页面做了一个展示上的优化。现在对于这个子分组呢,你是可以直接在里面去创建盒子的,可以点击这个右侧的图标,也可以直接鼠标右键这个分组, 创建子分组或者创建盒子都是 ok 的。 同时呢,你会发现在顶部这里盒子也有一个布局的选择了,这个布局设置呢,你可以设置每一个盒子的大小,然后你还可以设置每一行子分组的展示个数,默认的话是展示一个,你会发现在这个新建分组一下面,它有两个子分组,分组一和分组二, 如果你某一个分组的盒子太少了,然后右边有很大的空缺的空间,那么就会导致这个空间浪费,这个时候你可以选择到这个每一行展示的子分组个数,为它展示成两个,你会发现分组一和分组二就放到一块了, 然后你还想恢复默认,直接点击重置就可以了。本次更新还对笔记中的代码块做了一个小优化,每一行后面都会展示一个复制图标, 点击之后就可以很方便的复制这一行代码。笔记中代码块的自动换行呢,你可以到设置的卡片里面来,这里面可以设置你新建一个代码块的时候,是否开启这个自动换行以及这个代码折叠功能。然后我们往上看,你会在这里发现在白板的设置里面呢,多了一个默认行为的设置, 也就是你拖拽 pdf 视频以及音频这些文件,拖拽到他们到白板的时候,默认呢是链接到你本地的文件, 也就是只会保存一个这个文件在你电脑上的文件路径而已,你可以把它改为导入 maswap 的 数据库,这样你电脑上那个文件丢失了,它依然是可以查看到的。标签页的文件夹现在也支持了修改图标,也可以用图标,也可以用这个 emoji 表情,例如这里我给它改一个 emoji 表情吧, 非常方便。然后你改错了,不想要,依然可以到更改图标里面来还原为默认。本次更新还对笔记中分栏里面的图片做了一个小优化,大家在分栏里面插入一个图片的时候,会出现这种宽度,跟这个分栏不对称, 你想他这个芬兰能够自动的撑满,不需要你手动去调节,并且有的时候如果说这个芬兰右侧图片太窄了,会发现这个图片的操作按钮没了,现在给他优化了一下,会显示三个点,你去点击给他展开就好了, 然后支持一键撑满这个芬兰宽度,这样你再去调整的时候,他的默认一直是撑满这个整个芬兰的宽度的,这样你在调整你的布局,整个文档的这个排版的时候就非常方便了。本次更新对白板也有一个小的优化点,我们在 macos 上的话,摁住 command 键, 然后再去拖拽一个节点,他就只能够水平移动了。如果你摁住的是 shift 键,再去拖拽,他就只能够垂直移动。 那么在 windows 上面呢,也是按住 shift 键垂直移动,但是水平方向移动的话,就是按住 ctrl 键。本次更新的内容其实是非常多的,大家可以到 marswell 的 文档中心来查看本次更新的完整内容。 另外大家感兴趣的话,可以到官网立马来下载体验一下 marswell 这个笔记软件。最后也祝愿大家在新的一年里心想事成,马年大吉!

苹果这波操作挺恶心的,你们想升级都全部给你们推送二十六系统啊,你们想更新十八系统都没有办法,特别是什么老设备。苹果十一也给你们推送二十六系统啊,但是目前还可以通过延迟升级的方法,就是用这个软件 还可以去更新到十八点七,还有十八点七二,延迟升级是不用刷机的,数据都在,没有风险, 比如十八点一现在还可以升级到十八点七,十八点七二,而且十六 pro max 用起来非常的流畅。远程操作啊,非常的简单,十分钟就可以看到更新了。 已经更新到十八点七了啊,你看桌面的布局都在,很多人以为是刷机,会不会有资料丢失?不会啊,你们手机都升级过, 而且这个延迟升级是低系统升级啊,不是二十六系统降级啊,所以大家降级的就不用问我啊,操作不了。

大家好,欢迎收看数据库教程,今天我们讲一下如何更新和删除数据库数据库表的数据。 在开始教程之前,我们首先要做一些准备工作。首先我们要呃创建一个表表,包含三列, student id, 学生名 name, 学生专业,没准。然后我们插入出去,插入这四行。 下面我们学会更新数据,更新数据的关键词为 update, 比如说 update assurance set major 等于嗯 beautiful viamujiu belarci, 意思就是说我们要把专业名,所有的专业名是 belarci 的专业改成 beauty。 update 比较符,我们讲一下比较符,我们现在有有有六个比较符,分别是等于大于小于、大于等于和,小于等于和不等于,这是我们比较常用的。这些比较符一般 都用在 where, 比如说我们现在呃另外一个例子是 update student set named type major 等于 a semestry where students id 等一,也就是说我们把学生 id 等一的这一行把内蒙把学生名改成太,学生专业换成 semi straight。 第二个是哦 do semi straight, we a major 等 biu, 嗯,哦 major semi straight 意思是把学生专业为 built 和 major, 呃,或者是 major 等于 semi straight 的 名字全部换成 boss miss 水 day late。 删除数据,删除数据的关键词为 delete, 语法是 delete from 学生名 student, 然后设置你的约束 where student id 等于二,这样的话就会把 sun 学生 id 等于二的这一行给删除。 我们也可以使用多个条件 delayed from students where name 等于太 and major by abuse mystery, 意思就是拜学生名等于嗯,学生名是太,然后学生专业是 byrosy, 这一行会删除,所有行会删除。现在我们讲一下,进行一下实操, 然后我们插入数据, 这样的话我们可以看一下数据表中的内容, 这样我们就可以看到我们已经插入的四行数据,现在我们要更新。第一个例子是更新专业名,我们把所有的专业名等于八字起改成 beau, 我们再看一下数据吧,所以我们可以看到原来呃,我们所有的专业名字都变成,呃,大家都是已改成了朋友。 第二个我们可以设置特定行,比如说 sun id, 我们班学生,第一行学生 id 等于一,换成学生名字等是泰和,专业为 semesco。 这些呢,我们可以看到内容, 这样我们可以看到第一行学生名字已经变成了太专 列名为三明四确。第三行。第三个例子拜专业, 专业 view 和专业 semester, 呃, semestery 合并成 deal semestery, 我们可以看到我们现在已经有已经和已经更新完成,现在我们讲一下 delete。 首先我们可以删除特定行, 我们可以删除特定行,随便的 id 等于二,这样我们就可以把特定行给删除掉, 我们可以看到我们 student id 等于二的,那银行被删除掉了,现在我们可以删除。 另外一个例子是我们要删除学生名词态,然后专业是 beyond beautiful industry 的这个这这一行 我们可以看到我们已经好,我们先来看一下专业,呃,更新数据的语法为 update 表的名字 set where, 删除数据是 delete from 学生,嗯,表的名字,然后加条件。好,谢谢大家收看我的教程。

现在是二月二十八号啊,第一系统啊,比如十六系统啊、十七系统啊,十八系统啊,还可以去 升级到十八点七二这个系统啊。呃,十八点七二这个系统将是十八的绝版,它关闭以后,你们所有人都只能去升级二十六系统了。然后最近很多人升级啊,呃,用延迟升级,不用刷机,不用备份, 但是很多人升级都反馈十八点七二升级不了,更新不了。一般有两种情况,第一个你们的手机是没版的, 更新不了,然后二手的什么基带有问题。还有第三种就是系统太久没有更新了,一些老设备啊,所以不是通道关闭,是你们的手机有问题。



好朋友们,那我们这个小节呢,就从第一个方案我们一一带来来分析啊,它的一个可用性啊,我们首先先看这个方案,就是先更新缓存,而后呢再更新我们的数据库,那这种方案怎么样呢?首先说结论,它不可行啊, 这为什么不可行?哎,这就是我们这小节哎,他的一个学习的一个目标啊,就是我们学完这个小节,要清楚的知道造成这种方案不可行的原因啊。那么这个原因呢,有两个,第一个呢,是不同的数据库之间 进行双写,他是不具备事物的原则性的,哎,是无法保证这个原则性的,那么将来会造成数据的不一致。那么这个第二个原因呢,是由于并发啊,这个线的并发会导致我们的一个数据覆盖产生一个脏数据之类的啊,而后会造成数据不一致。 那么接下来呢,我们就分别哎,去看一下导致这方案不行的这两种原因啊。我们先来看第一个场景啊,就这个事物原则性导致的场景。 好,那么这里呢,我给大家引入这么一个场景啊,就是我现在干嘛呢?要将某一个用户的账户余额从一百更新为两百,那目前初始只是一百,看见吗? ok, 那我们采用这样的一个策略的话,就是先更新换成嘛,再给你数据库嘛,那么第一步将 renix 的数据修改为两百,紧接着我要过来更新买 stop, 但是这个时候失败了,那同学们,请问 rans 当中的数据会回本吗?会,哎,刚说完,对吧?这里面不会的原因就是因为什么 这是两个数据库,他是保证不了两个数据库的这个事物的特性的,没错吧?哎,所以呢,就会产生数据规则。 那有人会问了,那如果 macbo 也修改成功了呢?那会不会还有其他的产场景才是数据不一致的?哎,也是有可能的,比如说我们在 macbo 操作以后,还有其他的一些业务逻辑啊,等着我们去执行, 那这个时候他也出现异常了,那是不是也会造成买 c 口的这个数据的回本啊?哎,回本低一百,但是 ready 是可不会鸟你,对吧?他是不会回本的,那么这个时候呢,又出现了数据位置,所以大家来先来看我们现在采用什么问题呢? 是不是 ready 词语买 circle 数据库数据位置了?哎,很简单,那导致这个问题的一个根本原因是什么? 对了,很好啊,因为我们的 release 与买 circle, 他是两个数据库,他们之间这个写操作并不具备事物的 acid 特性,中法保证他们之间写操作一个原则性的。而场景呢,我们刚才也看到了两个,一个是修改 red 成功,而修改买 circle 失败,但是 redis 是不会回本。 第二个场景呢,就是整个过程其他的一些业务逻辑出现异常,那卖烧烤呢?会进行回本,而 renis 呢,不会回本,没错吧? ok, 好,那到这呢, 我们就把这一个方案不可行的第一个原因分析清楚了,接着我们来看第二个并发导致的啊,这个数据不一定问题。那么现在呢,也有这样一个场景啊,这个时候大家注意了,是多线程去并发的更新用户的账户数据啊,多线程并发的更新用户的账户余额啊, 那这里呢,我给大家摆了这么一个,用 excel 啊,去做了这么一个识趣图啊。左侧呢,大家可以看到啊,其实一个执行的顺序的一个解释啊,一二三四啊,这步骤。然后呢,左侧这个绿色部分线程一啊,后面这个蓝紫色这块啊,是我们的线程二,而在我们两个线程里面,他是分别对我们的 redis 和买车的进行操作, 橙色的这块啊,就代表操作的 ready 啊,而蓝色的这块呢,就代表操作的是买 sever, ok, 那大家根据这个时序来,现在是不是现成一,先修改这个账户数据,修改为两百,嗯,注意啊,我们现在的初始的账户余额是一百, ok 吧,那么现成一呢?现在和现成二都想去修改这个账户余额,没错吧?其中现成一呢,呃,先修改 release, 修改后修改 mac 口啊,先后去更新为了两百,而现成二呢,先后的把他们更新为三百。 但是呢,这个期间,朋友们注意,在县城一修改 red 成为两百以后,那么由于呃,这个 cpu 的这个执行权的一个抢占,或者由于系统的卡顿等等诸多原因啊,他在这就是卡了, 而没有紧急的去更新数据库。这个时候呢,由第二个县城把这个执行权抢走了,他呢,先把 release 啊,就是先更新缓存,更新的三百,然后呢再更新我们的数据库,哎,到这个啊,更新操作之后,我们的县城一才反应过来,哎,修改为了两百,那么大家 我们来看一下目前的数据一致吗?哎,通过这个步骤呢,应该很清晰的能看到数据库当中最新的是不是两百,而我们的 redis 当中最新的是多少? 三百,哎,这就出现问题了,三百。好,我们把这个这个原理图我们给滴在屏幕上面,接着呢朋友们,我们就要通过,哎,程序啊,去把这个什么呢流程去复现一下,哎,你光看这感觉没什么感觉,是吧?哎,也也,这个记得并不老。下面呢我们通过程序啊来互换一下来整个过程。 好,我们把我们的这一个窗口切到我们的 id。 好,那么在这呢,我给大家准备了这么一个项目啊,啊,这个翻译成中文啊,就叫这个双写一致性的一个演示, ok 吧。啊,这个里面呢,我们先呃看一下这个配置文件啊,这项目非常简单,大家看配置文件里面主要就是配了操作,要操作我们数据库,然后呢也要操作 release, 其他就没啥了,买个 plus 配置。那紧接着呢,在我们的代码层面呢,我们来看一下,其实这里面就有 control 了,而操作的实体呢就是一个用户,而我们操作用户的时候,最主要是操作这个里面的账户余额啊,跟我们这个场景一致啊,那么我们去看 看一下这个 ctrl 里面有什么呢? ctrl 啊,目前代码看的时候挺多的啊,但是大家不用管,那个是我们一会一个一个方案又需要用到的一些方法,我们这个里面需要预先看两个方法啊,就是这两个,第一个呢是实时的去查询两个数据库的账户余额信息, 那就说你一会调这个接口,你就可以看到目前数据库是多少啊, ready 是多少。这里面代码很简单,先后查询两个数据库啊,而后呢把这个结果呢展示在我们的浏览器上面, 没问题吧? ok, 那么第二个方法是什么呢?呃,他是,呃将来方便我们做测试的啊,他是用来重置两个账户中的余额信息的,他把余额可以重置为多少呢?哎,都是一百,看见吗?这是把数据过啊,是不是重置为一百啊?那么下边呢,是不是把 release 是不是重置为一百? ok 吧,这个是为了方便我们以后做测试数据还原的。 ok 啊,那我们现在可以访问一下这两个方法啊,非常简单。嗯,这里我做一下测试说明啊,就是在我们重置的时候其实他是一个 什么更新操作吧。但是这里呢,我为了方便啊测试啊,我还是依然用那个 get 买屏。当然是啊,实际过程中我们应该用个 pro 买屏,能理解吧啊,但是我一会呢会通过浏览器访问码去重置嘛,所以呢,更方便一点啊,所以我就用了 get。 好吧啊,实质应该用 pro 买屏啊。 ok, 那我们呢来访问一下这两个方法啊, 第一个是,呃, carry d b balance message 查询余额,第二个是 reset 重置 d b 的啊, balance 重置余额。好,那就这两个了啊,我们先来,哎重置一下走,那么现在呢?哎,已经重置成功了,是不是反而 ok 啊, 那么紧接着呢,哎,我在查询是不是返回的是一百一百,哎,没问题啊,好,那我们呢再切回来啊,切到这个窗口,目前这个项目是已经起来的状态了。 好,那下面呢,我们要关注的就是什么呢?就是我们的代码了,同学们,就是我们的这个两个,呃,这个县城的代码,那么这里面呢,同学们,我们如果要演示的话,应该是通过一份代码演示, 然后呢通过多个县城去都去访问这一个方法,对吧?但是呢,我目前要演示什么呀?是不是要演示他这个并发的一个情况?对,那如果你呃 自己啊不控制的话,不加以控制,那么是不是不太好附线这种问题啊,所以呢,这个里面我就通过两个方法去演示的,大家看看明白了吧。两个方法,那么这个呢,就代表我们的线程一啊,这个里面你看我们方案一数据写入的线程一, 那么在下面这个呢,就是数据数据写入线上二,哎,两个方法,那么在 sos 层我们哎干了什么呢?其实比较的简单啊,那么为了让大家呢能够快速的 get 这个代码在干什么?我们呢来通过这个截图啊,通过这个箭头的方式,我给大家啊说明一下,首先呢,我 这个第一个线程过来先干嘛?是不是跟进我们的板材,对吧?紧接着第二步休眠了三秒,这个,所以这中间空的大家都可以认为他是在休眠,那么紧接 呢,再去修改我的奶舌口,哎,那么对于第一个线程干的时候是不是很清晰的? ok, 下面呢,我们换个颜色,咱们来标记一下我们的线程二,那么线程二呢,为了让线程一的这个 release 先执行,所以他是不是先休眠了一秒, 哎,兄弟一个,那我们的这边的这个县城一肯定就得先执行这个 release 修改操作,哎,那么紧接着呢,我们再将我们的 release 是不是修改为了三百,对,没错啊,至于这里面修改两百,三百,是不是就看我们一会产的数据了, ok 吧。啊,那么最后呢,我们再去更新我们的数据库, ok 吧。哎,这样呢,就完美的复现我们这一个场景吗? ok, 那这里呢,我们也来保存这个图啊,保存一下,这个叫什么呢? 这个叫先更新啊,更新缓存后更新数据库,这个叫代码对照图,好吧, ok, 嗯,保存好,那么 把这一个原理啊,这个代码的原理啊,搞清楚以后呢?那我们现在把这个哎滴在上面,下面我们来去测试一下啊,并发的,来访问一下这两个接口,也就是并发哎,来演示一下我们这个场景啊,那么怎么演示呢?我们要同时访问这两个方法,对吧? 那我可没这么快的手速啊,手速,那么呢要记住一个工具,这个工具我们学过,这什么啊,大声一点,解密特对吧?哎,通过解密特压测工具不就能够并发的访问这两个方法吗? ok, 那我们来到这个解密特,我现在已经打开了解密特的这个窗口,那么我呢给大家写好了一个解密特的一个测试文件啊,把它拖过来。 好,那在这里呢,我给大家整了 n 多种方案啊,大家可以看方案一方二三四,那我们现在是不是方案一啊,对吧,先更新数据库啊,应该先更新缓存啊,我们用这个吧,先更新缓存,对不对?后更新数据库吧,我们看这里面访问的路径啊,这里面是 oppo, 呃, operation 二,完了,这里面是 做事有点问题啊,这个应该给他改一下啊,再改一下没问题,没关系啊,改一下这个改成方案二啊,这个是二,那么这个呢?呃,也是一样的啊,这个给他换成这个,然后呢后面的呢,这个里面呢,我们就改一下这个就行了,把这个给他干掉啊,我们把这个做事给大家换过来,这样呢,我们后面看更友好一点啊, 好,大家,我们现在是不是先更新缓存呢?再更新数据库,没错吧?嗯, ok 啊,那么下面呢,我们就来看一下这个线程里面啊,我们准备配置了, 首先呢在这个窗户里面啊,我们是去访问的 oppo 型一就方案一的更新的线程一,而我的线程二是去访问的我们刚才那个第二个 ctrl 的接口啊,就是 ctrl, 第二个结果就是啊配的线程二 没问题吧,很慢,并且我是不是分别给了我的一个呃,请求题的一个参数啊?哎,在我的县城因素里写入的时候呢,他是需要有两百,跟我们这个图一致啊,在我们的县城二呢, 我们写入的时候需要为三百,没问题吧?嗯,那么现在呢,我们把这个方案给他打开启用,紧接着呢我就可以干嘛呢?执行我的启动了,下面一键启动,走,你好,我们回到我们的控制台看我们的日志啊, 好,我们试试。好,那么开始呢,大家你就会发现呢,这里面呢有很多的这个黄色的这个警告日志,对吧? ok, 这个呢其实是我通过那个代码封装啊,然后呢去打印的日志,那么大家现在可以来看一下,可以来看一下这个结果怎么样,是不是按我们之前所讲内容执行的。 首先呢我们的现成一将我们 redis 余额修改为两百,没错吧?现成二呢?将我们的数据修改为三百啊,叫我们 redis 余额没问题。然后几个是不是又是?应该是现成二。现成二,将我们的数据库修改为三百,注意看,这是有现成的啊,那么现成,呃,要是第四个步骤啊,现成一,将我们的数据库有买 st 需要给两百,没问题吧?是不是严格按照我们刚才的步骤走的?是的, ok, 那我们呢?下面来看一下,来看一下我们的一个什么呢?一个结果,走,查询走,你怎么样?数据不一致了,同学们,哎,我们的数据库呢?还是两百,而我们的 redis 呢,却是三百啊,跟我们分析的一模一样。 好,那我们呢?回到我们的 ppt 啊,我们来总结一下啊,我们刚才出现什么问题了?朋友们对数据不一致了,那为什么出现呢?因为他,哎,这次还是因为事故导致了吗? 并不是因为什么导致的。对了,就是由于我们的并发导致的吗?对不对?现成并发导致的数据覆盖吧,造成的数据不一致吗?你看,这可不就是数据覆盖吗?你现成一修改两百,我现成二,紧接的数据给你覆盖掉了,哎,然后我现成二修改为三百数据库,我现成一,是不是紧接又给你覆盖掉了,哎,这就不一致了。 ok, 那相信这种方呢?他为什么?呃,有问题,相信大家应该已经 get 到了啊,那下面呢?我们一起啊,来干嘛呢?总结,复盘一下啊,那先更新缓存,再更新数据库,这种方案可行吗?不可行,不可行。对了,他不可行啊,为什么呢? 原因有几个来,有几个?有两个。第一个原因是什么?对了啊,第一个原因就是不同的数据库之间双写是不具备事务原则性的啊,造成数据不一致。 那么这里呢,其实要说明一点的就是这个说的不同数据库啊,它其实不只是指我们 release, 有买 come release 跟其他数据库如果有双写是不是也是一样的? ok, 那么第二个原因,刚才大家说的是由于,哎县城并发是不是导致的数据覆盖,从而造成数据不一致? ok, 那么相信啊,这一个方案大家应该已经 get 到了啊。好,那我们这个小节呢,就先到这里。

怎么保证 radis 和数据库的一致性?一、先更新数据库,再删除缓存。二、延迟双删,先删除缓存,更新数据库,延迟一秒后再次删除缓存。三、获取分布式所查询数据库最新数据,更新缓存释放锁。 四、采用 can i 监听 my sql vlog 捕获数据变更,并通过 mq 更新或删除 radis 缓存。兜底方案,所有缓存必须设过期时间,就算不一致,过期后也能自动恢复。

哈喽,大家好,我是阿江。那这期视频给大家分享一下 notion 最近的更新。 notion 说过了 automate 点 io 以后并没有做太大的改动,目前的一个自动化就是 啊,当有一个属性更新以后,比如说就是有一页增加以后啊,可以去编辑或者是通知,我觉得最实用的就是通知,但是他这个用的是这个 slack 啊,不如之前的像什么奥特 mate l 带的那种, 像谷歌日历或者是邮件之类的那些通知要方便,所以我觉得他这个更新并不是很有用。我敢说 nosion 最近可能都比较划水。 然后呢,就是冻结数据库列,那这个 nose 的表格做的越来越像这个 excel 了,为什么这么说呢?一会还有一点更新,我们在选择列的时候,点击一下这个列,它这边有一个冻结这个列在这,这是取消冻结这个列,也可以选择冻结这个列,那以后他就会 在最前面,你可以横向去看,他会有那种不动的页面,你看到帕斯沃时候就不动了,比如说在这给他动上, ok, 然后你看他这个是可以横向的去移动的,正面看起来和 excel 非常像。我们在使用 excel 的时候,经常把首列还有首行去冻结,去查一个表的数据,这个公式,公式的话,然后他说的是 公式,他会给的报册更加的明细,比如说你哪写错了,然后他都会去报错,同时呢他还会可以允许你去写一些注释, 这个就是他推崇的这个二点零。那最近微软也在 excel 中添加了这个 python, 可以在 excel 中直接写 python 代码,那我觉得这两个有一群 同工之妙, ai 转换数据库中的任何属性,这一点其实我觉得特别有趣啊,比如这个怎么用?我给演示一下啊?首先呢,我们在我们的这个属性里边新建一个属性,然后他这边会有推, 比如说是 ai 总结, ai 的主要信息, ai 的自动填充,还有 ai 的翻译,我们一定是去选 ai 的翻译,那翻译的时候我们去选哪些呢?他这边有一个设置,就是在我这个页面更新的时候,自动就去编辑他,这个就是选项你要去翻译哪一段,比如说我们就翻译标题, 他这边有一个语言,语言里边我们看了一下啊,他这边有很多语言支持,同时也包括中文啊,我就想问为什么你都已经在这个自动翻译里边包括中文,在所有语言里不包括中文是吧?就是总给中国玩家这种希望,然后最后又不使用,可以看一下他这边去翻译, 这下他这边正在翻译。哎,他这边翻译的可能有点少,你看他这边正在写,同时呢,我们还可以让他翻译成别的语言,比如说我们这边编辑这个属性啊,传思 later 语言就选这个吧,我也不知道这是什么语言,试一下。 ok, 他这边已经 更新完了啊。再就是一些小的修复,这些修复和之前对比并没有很明显的改进,我觉得啊 no 神最近可能在做一些架构调整之类的,反正就是感觉他们最近的更新非常的摸鱼,特别划水。我最近也在寻找新的笔记软件,如果大家有什么想要推荐的软件,可以在我的视频下方留言,谢谢大家,再见!

hello, 大家好,今天和大家分享一下近期准备更新视频的一个计划,近期的话准备做一个系列,是关于我们数据库系统概论的, 不知道大家这学期有要学这门专业课的同学吗?大家一般计算机类相关专业课,而且这门专业课如果对于大家之后有选择后端开发或者是 数据分析相关岗位的话,其实这门课还是比较重要的。当然我们准备是从两个板块去更新相关的视频。第一个板块呢,我们主要是来更新这些题型, 大家应该大部分是使用的是这本教材吧。第五版的一个教材题型的话其实也是挺多的, 它分为,嗯,主要是我们比如说选择题,还有我们的填空题,还有我们的一个检查题, 比如说去迅速数据库系统三级模式结构对吧?分别这种结构对应什么优点?内模式,外模式,还有我们模式的一个定义术语,对吧?解释一下术语。但是对于这些题的话,它更多的是一个对于我们期末考试的一个备考, 我会更新这个系列,但是除了要期末考试的这些知识之外,我们还要学会一些基础的 circle 语句的书写, 所以我们第二个板块就是要更新 circle 增删改查以及更多语句的书写。 我们的试题来源是来自于纽克网的,上面有很多关于 circle 的 一些题目,有简单有入门,有比较热门的题,有比较有难度的题,当然也有一些企业对应部分题,就是一些企业的笔试,我们会更新这个系列, 嗯,可能一下子会更新不满,但是会慢慢做好这个系列的,大家如果有一些关于这节课讲解的一个 方式或者是方法的话,大家可以发到评论区,我会逐一看大家的每一个想法,然后的话目前计划是要做好这个系列一直会更新下去的。 嗯,教材的话我给大家看一下,这本书的封面是这个数据库系统概论这本书第五版, 大家有想听的一些题目的来源,比如说大家想听某个网站的,或者是某些教程上面的,大家都可以发到评论区,我会考虑大家的这些想法和观点的。 那么今天的分享就到这里,今天主要出一期关于我们更新的一个计划啊,然后希望大家这学期 学习进步,我们下个视频再见。拜拜。

大家好啊,今天咱们来聊聊数据库里一个特别重要的东西,锁。你有没有遇到过这种情况,两个人同时修改同一个 excel 文件,结果后改的人把前面那个人的修改给覆盖了, 这在数据库里叫做丢失更新。想想看,要是成千上万的人同时操作数据库,那不就乱套了吗?别担心,数据库有个好帮手,那就是锁。 怎么理解锁呢?咱们把数据想象成宿舍里的那台公共洗衣机,如果有人要使用洗衣机,就相当于对数据进行操作。有一种锁叫排他锁,也叫 x 锁或者斜锁。 就好比你要用洗衣机,你得先把洗衣机的门锁上,然后你在里面既可以看洗衣机怎么运作,也可以往里面放衣服启动它,这时候别人就没法用了,既不能打开门看,更不能用这台洗衣机 对应到数据库里,就是你要修改数据的时候,必须先加上 x 锁,而且这个锁要一直保持到你这个操作结束,锁住之后,别人既不能读这个数据,也不能写,完全是你不占。但如果只是想看看数据不修改呢?这时候就用到共享锁了,也叫 s 锁或者独锁, 还是用洗衣机比拟。就像洗衣机的门是透明的,几个人都可以站在外面,透过窗户看里面衣服洗的怎么样,但谁也不能打开门去动它。在数据库里就是如果只是读取数据,就加上 s, 这样大家都可以同时读这个数 据,但只要有一个人加了 s, 就 不允许任何人再对这个数据进行了。记住一个口诀,读读共享,读写互斥。意思就是多个读操作,可以同时进行 锁,不仅有类型,还有力度。什么意思呢?就是锁可以锁整张表,这叫表级锁, 也可以只锁表里面的一行数据,这叫行级锁。锁的力度越小,比如行级锁,那么多个操作就可以同时在表的不同行上去,引发度就越高。但数据库管理这些锁也就更复杂。为了解决并发操作可能带来的问题,数据库还有三级封锁协议, 专门对付三大问题,丢失、更新、读脏数据不可重复读一级协议是为了防止丢失更新的,它规定在修改数据之前必须加上 x 锁,并且一直保持到事物结束,这样就解决了丢失更新的问题。 但是读数据的时候是不加锁的,所以可能会读到脏数据,也就是别人修改了但还没提交的。二级协议呢,是在一级协议的基础上增加了一条,读数据之前要加 s 锁,如果读完之后就可以立即释放 s 锁,这样就避免了读到脏数据,但还是可能出现不可重复读的问, 就是你两次读同一个数据,结果可能不一样,因为中间可能被别人修改。提交了三级协议就更严格了,它在一级协议的基础上规定读 数据之前加 s 锁,而且这个 s 锁要一直保持到事故结束。这样一来,丢失、更新、读脏数据不可重复读,这三大问题就全部解决了,但相应的发病率也就最低了。说到这,可能有同学会想起课本上讲的隔离, 其实啊,那些隔离级别就是这些锁策略的包装。比如读已提交这个隔离级别就差不多相当于二级协议,主要是防止脏读,可重复读呢,就近似于三级协议,能防止丢失、更新脏读和不可重 复读。而最高的串行化隔离级别,就相当于用了最强的锁,让所有操作完全串行执行, 虽然安全,但效率也最低。所以你看数据库的锁机制,其实就是在安全和效率之间找平衡,锁越严格,数据就越稳定,不容易出错,但并发症就会差一些。锁越宽松,性能可能上去了,但数据一致性的风险 最大。数据库的发病控制,说到底就是在这两者之间找到一个最合适的人。好了,关于数据库锁,就聊到这,明白了吗?