一切福田,不離方寸,從心而覓,感無不通。

Category Archives: Backend

4 月数据库流行度排行榜:三巨头分数暴跌

DB-Engines 4 月份流行度排行已更新(基于 3 月份的整体数据变化)。 从总榜来看,前十数据库的排名和上个月保持一致。虽然排名没有变动,但单个数据库的分数却变化不少。稳居前三的 Oracle、MySQL 和 Microsoft SQL Server 分数出现了较大幅度的下跌,分别减少 46.82、34.14 和 7.33 分。其中 SQL Server 分数已经连续下跌了两个月。若与去年同期的数据相比,三者下跌的分数平均已达到 64 分。 后起之秀 PostgreSQL 和 MongoDB 依旧保持着稳步上升的趋势,分数与上个月相比有小幅度增加,与去年同期相比也平均增加了 40 分左右。 ▲ 前十数据库的分数变化走向 对于排名 20 之后的数据库,以年为维度,排名显著上升的数据库有 Snowflake 和 Clickhouse,Snowflake 由去年同时期的第 100 名上升到现在的第 29 名,后者也从第 71 名上升至第 50 名。两者都属于云数据仓库,Snowflake 的母公司去年上市后更是获得巴菲特青睐,股价飙升。相信这也是它排名上升的主要原因。 最后看看各类型数据库的排名情况。 关系数据库前 10 名 Key-Value 数据库前 10 名 文档数据库前 10 名 时序数据库前 10 名 图数据库前 10 名 DB-Engines 根据流行度对数据库管理系统进行排名,排名每月更新一次。排名的数据依据 5 个不同的指标: Google 以及 Bing 搜索引擎的关键字搜索数量 Google Trends 的搜索数量 Indeed 网站中的职位搜索量 LinkedIn 中提到关键字的个人资料数 Stackoverflow 上相关的问题和关注者数量 这份榜单分析旨在为数据库相关从业人员提供一个技术方向的参考,其中涉及到的排名情况并非基于产品的技术先进程度或市场占有率等因素。无论排名先后,选择适合与企业业务需求相比配的技术才是最重要的。   from:https://www.oschina.net/news/135658/db-engines-ranking-202104

龙生   09 Apr 2021
View Details

浅谈编程范式

| 前言 相信绝大部分开发人员、DBA都听过范式这个词,在MySQL中有第一范式、第二范式、第三范式、BCNF范式等,在开发中也有相应的范式,专业词汇叫编程范式(ProgrammingParadigm)。由于笔者能力、精力都有限,本篇主要通过针对同一业务场景,基于编程范式的概念,核心原理以及用例实现来对比不同范式及其实现业务功能的差异。 范式分类 如图1所示,范式可以简单分为三类: 图1: 范式的简单分类   范式和语言的关系 图2: 范式和语言的关系   与成百种编程语言相比,编程范式要少得多,如图2所示,共有27种范式。多数范式之间仅相差一个或几个概念,比如图中的函数编程范式,在加入了状态(state)之后就变成了面向对象编程范式。   | 编程范式 图3: 华山派剑气之争 过程式编程的核心在于模块化,在实现过程中使用了状态,依赖了外部变量,导致很容易影响附近的代码,可读性较少,后期的维护成本也较高。 函数式编程的核心在于“避免副作用”,不改变也不依赖当前函数外的数据。结合不可变数据、函数是第一等公民等特性,使函数带有自描述性,可读性较高。 面向对象编程的核心在于抽象,提供清晰的对象边界。结合封装、集成、多态特性,降低了代码的耦合度,提升了系统的可维护性。 不同的范式的出现,目的就是为了应对不同的场景,但最终的目标都是提高生产力。就如华山派的剑宗、气宗之别,剑宗认为“剑为主,气为辅”,而气宗则反之。每个范式都会有自己的”心法”,但最终殊途同归,达到至高境界后则是剑气双修。   | 小结 阅读完之前内容后,相信各位读者对编程范式有了初步的理解,那么接下来就和笔者一起来实现业务的真实需求。   | 需求  1.解析并收集shannon, fio 两种 flash卡的温度、寿命等信息。  2.对实现代码进行单元测试 在用过程式实现之前,笔者先给大家介绍下什么叫过程式编程。   | 过程式编程(Procedural) 过程式编程和面向对象编程的区别并不在于是否使用函数或者类,也就是说用到类或对象的可能是过程式编程,只用函数而没有类的也可能是面向对象编程。那么他们的区别又在哪儿呢? 面向过程其实是最为实际的一种思考方式,可以说面向过程是一种基础的方法,它考虑的是实际地实现。一般的面向过程是从上往下步步求精,所以面向过程最重要的是模块化的思想方法。当程序规模不是很大时,面向过程的方法还会体现出一种优势。因为程序的流程很清楚,按着模块与函数的方法可以很好的组织。 关键部分实现代码

代码问题 1.逻辑冗长,局部修改必须阅读整段代码 2.对外部变量有依赖 3.内部存在共享变量 4.函数内部存在临时变量 测试代码 过程式的测试代码效果远不如函数式有效,过程式的实现逻辑过于冗长,导致测试效果并不够好。   | 函数式编程(Functional) 当谈论函数式编程,会提到非常多的“函数式”特性。提到不可变数据,第一类对象以及尾调用优化,这些是帮助函数式编程的语言特征。提到mapping(映射),reducing(归纳),piplining(管道),recursing(递归),currying(科里化),以及高阶函数的使用,这些是用来写函数式代码的编程技术。提到并行,惰性计算以及确定性,这些是有利于函数式编程的属性。 最主要的原则是避免副作用,它不会依赖也不会改变当前函数以外的数据。 声明式的函数,让开发者只需要表达 “想要做什么”,而不需要表达 “怎么去做”,这样就极大地简化了开发者的工作。至于具体 “怎么去做”,让专门的任务协调框架去实现,这个框架可以灵活地分配工作给不同的核、不同的计算机,而开发者不必关心框架背后发生了什么。 关键部分实现代码

  以上代码带有自描述性,通过函数名就可知在做什么,这也是函数式的一个特性: 代码是在描述要干什么,而不是怎么干。 测试代码

  | 面向对象编程(Object-Oriented) 并不是使用类才是面向对象编程。如果你专注于状态改变和密封抽象,你就是在用面向对象编程。类只是帮助简化面向对象编程的工具,并不是面向对象编程的要求或指示器。封装是一个过程,它分隔构成抽象的结构和行为的元素。封装的作用是分离抽象的概念接口及其实现。类只是帮助简化面向对象编程的工具,并不是面向对象编程的要求或指示器。 随着系统越来越复杂,系统就会变得越来越容易崩溃,分而治之,解决复杂性的技巧。面对对象思想的产生是为了让你能更方便的理解代码。有了那些封装,多态,继承,能让你专注于部分功能,而不需要了解全局。 关键部分实现代码

  | 编程范式带来的好处 范式就像武功心法,可以更快的练成绝世神功,但还是离不开基础功。代码也一样,通过遵循相关范式和良好的设计后,会带来可读性、扩展性和可维护性更好的代码,进而提升软件的质量。   | 总结 命令式编程、面向对象编程、函数式编程,虽然受人追捧的时间点各不相同,但是本质上并没有优劣之分。 面向对象和函数式、过程式编程也不是完成独立和有严格的界限,在抽象出各个独立的对象后,每个对象的具体行为实现还是有函数式和过程式完成。 现代的程序员应该很少有门派之见了,应该集百家之所长,学习其它范式(语言)的优秀设计理念,集成到自己的代码(产品、语言)中,提升工作效率。   | 致谢 简述编程范式:https://ginqi7.github.io/posts/brief-description-of-programming-paradigm.html 编程范型:https://zh.wikipedia.org/wiki/%E7%BC%96%E7%A8%8B%E8%8C%83%E5%9E%8B 学习编程之概述—从编程范式开始:http://dataunion.org/23223.html 面向对象编程 VS 函数式编程:http://blog.swanspace.org/oo_vs_fp/   […]

龙生   06 Apr 2021
View Details

泛型编程

泛型编程(Generic Programming)最初提出时的动机很简单直接:发明一种语言机制,能够帮助实现一个通用的标准容器库。 所谓通用的标准容器库,就是要能够做到,比如用一个List类存放所有可能类型的对象这样的事;泛型编程让你编写完全一般化并可重复使用的算法,其效率与针对某特定数据类型而设计的算法相同。泛型即是指具有在多种数据类型上皆可操作的含义,与模板有些相似。 STL巨大,而且可以扩充,它包含很多计算机基本算法和数据结构,而且将算法与数据结构完全分离,其中算法是泛型的,不与任何特定数据结构或对象类型系在一起。   from:https://baike.baidu.com/item/%E6%B3%9B%E5%9E%8B%E7%BC%96%E7%A8%8B/6787248?fr=aladdin

龙生   06 Apr 2021
View Details

指令式编程

命令式编程(英语:Imperative programming),是一种描述计算机所需作出的行为的编程典范。 几乎所有计算机的硬件工作都是命令式的;几乎所有计算机的硬件都是设计来运行机器码,使用命令式的风格来写的。 较高阶的命令式编程语言使用变量和更复杂的语句,但仍依从相同的典范。 虽非计算机程序,但与命令式编程有相似的风格:每步都是指令,有形的世界控制情况。 因为命令式编程的基础观念,不但概念上比较熟悉,而且较容易具体表现于硬件,所以大部分的编程语言都是命令式的。   from:https://baike.baidu.com/item/%E6%8C%87%E4%BB%A4%E5%BC%8F%E7%BC%96%E7%A8%8B/22934771?fr=aladdin

龙生   06 Apr 2021
View Details

函数式编程

函数式编程是种编程方式,它将电脑运算视为函数的计算。 函数编程语言最重要的基础是λ演算(lambda calculus),而且λ演算的函数可以接受函数当作输入(参数)和输出(返回值)。  和指令式编程相比,函数式编程强调函数的计算比指令的执行重要。 和过程化编程相比,函数式编程里函数的计算可随时调用。 from:https://baike.baidu.com/item/%E5%87%BD%E6%95%B0%E5%BC%8F%E7%BC%96%E7%A8%8B/4035031?fr=aladdin

龙生   06 Apr 2021
View Details

Kafka、RocketMQ、RabbitMQ的优劣势比较

消息队列选择建议
1.Kafka

Kafka主要特点是基于Pull的模式来处理消息消费,追求高吞吐量,一开始的目的就是用于日志收集和传输,适合产生大量数据的互联网服务的数据收集业务。

大型公司建议可以选用,如果有日志采集功能,肯定是首选kafka了。

2.RocketMQ

天生为金融互联网领域而生,对于可靠性要求很高的场景,尤其是电商里面的订单扣款,以及业务削峰,在大量交易涌入时,后端可能无法及时处理的情况。

RoketMQ在稳定性上可能更值得信赖,这些业务场景在阿里双11已经经历了多次考验,如果你的业务有上述并发场景,建议可以选择RocketMQ。

3.RabbitMQ

RabbitMQ :结合erlang语言本身的并发优势,性能较好,社区活跃度也比较高,但是不利于做二次开发和维护。不过,RabbitMQ的社区十分活跃,可以解决开发过程中遇到的bug。

如果你的数据量没有那么大,小公司优先选择功能比较完备的RabbitMQ。

龙生   19 Mar 2021
View Details

如何备份PostgreSQL数据库 常见的几个备份命令使用

一般我们建站使用较多的还是固定开源CMS程序,且基本上也使用的是PHP+MYSQL程序,所以数据库上较多的还是使用的MYSQL数据库。但是前几天老左有遇到一个网友他使用的是PostgreSQL数据库,实际上这个数据库我们在使用虚拟主机的时候也是有见过的,但是确实用的不多。 如果我们需要备份PostgreSQL数据库的话,一般如果我们服务器WEB环境自带的管理小工具是可以直接导出备份的,但是如果是运维工程师自己编译的WEB系统,那我们就需要用到其他的单独命令备份,这里我们记录下如何通过PostgreSQL命令备份数据库。 第一、一键快速备份单数据库 su – postgres 这里我们登陆数据库。 pg_dump laozuo.org > laozuo.org.bak 通过命令一键将我们的数据库名换成我们需要备份的,然后备份。这里我们可以将备份的数据下载到本地。 psql laozuo < dbname.bak 如果我们需要恢复数据库可以用psql命令来恢复,是不是有点像我们MYSQL恢复数据一样。 第二、远程备份数据库 一般远程备份数据库我们个人使用的不多的,我们还是老老实实在当前服务器操作比较多见,但是这里的方法老左也记录一下。 pg_dump -h 1.1.1.1 -p 1234 dbname > dbname.bak 根据命令及端口进行备份,注意数据库名修改成我们自己的。 第三、设置定时自动备份 这个我们很多朋友都有用的,一般项目文件动的不多,一般都是数据库在增减。所以我们定期备份数据库即可,但是我们需要做到的是定时备份。 1、登录数据库 su – postgres 和上面一样,我们要登录数据库,然后设置定时任务。 2、创建备份目录 mkdir -p ~/dbbackups 我们需要创建一个备份目录。 3、创建定时任务 crontab -e 然后需要编辑文件。 0 0 * * 0 pg_dump -U postgres laozuo> ~/dbbackups/laozuo.org.bak 编辑完毕保存后,我们运营一次看看,是否备份进入文件夹。 这里我们在备份完毕PostgreSQL数据库之后,我们还是需要定期下载或者SCP推送到其他服务器。之前有个朋友确实会定时备份,但是他备份到的还是自己当前服务器。于是前几天发现服务器故障数据丢失,他悲剧了。所以我们还是需要备份到本地。   from:https://www.laozuo.org/16772.html

龙生   19 Mar 2021
View Details

GIT更新远程分支列表

当本地和服务器上的远程列表不一致时,使用下面的命令更新: git remote update origin --prune git remote update origin -p   参考:https://blog.csdn.net/sd_csdn_scy/article/details/82025009

龙生   17 Mar 2021
View Details

C#实现新建文件并写入内容

  from:https://www.cnblogs.com/thingk/p/3363880.html

龙生   11 Mar 2021
View Details

“git clone” 漏洞或可导致克隆过程中执行代码

近日,GitHub 官博披露了一个 “git clone” 命令的漏洞 CVE-2021-213,该漏洞可能导致特制的仓库在 git clone 过程中能够执行代码。 该漏洞源于 clean/smudge 过滤器(如Git LFS)中的延迟检查机制。 如果一个特别制作的版本库包含符号链接以及使用 clean/smudge 过滤器的文件,可能会导致在克隆到不区分大小写的文件系统(如 NTFS、HFS+ 或 APFS(即 Windows 和 macOS上 的默认文件系统))时执行刚检查出来的脚本。这个过程中,注意,clean/smudge 过滤器是必须的,而 Windows 默认配置了 Git LFS,因此更易受到攻击。2.15 到 2.30.1 的版本均会受到影响。 解决这个漏洞的最有效方法是升级到 2.30.2。如不能立即升级,也可以通过以下任何一种方式来降低风险: 通过运行 git config --global core.symlinks false 禁用 Git 中的符号链接支持。 禁用对进程过滤器的支持。(可以通过运行 git config --show-scope --get-regexp 'filter/\…*/\ process' 来查看系统是否配置了这些过滤器) 避免克隆不受信任的仓库。 GitHub 本身不容易受到这种攻击,因为其不会在服务器上存储已检查出的仓库副本,但 GitHub Pages 除外,尽管它没有使用任何 clean/smudge 过滤器。目前,该问题已在 3 月 9 日星期二发布的补丁中进行了修补。   from:https://www.oschina.net/news/132640/git-clone-vulnerability-cve-2021-213

龙生   11 Mar 2021
View Details
1 67 68 69 282