MySQL批量导入sql文本文件
MySQL批量导入sql文本文件 source abc.sql;
MySQL批量导入sql文本文件 source abc.sql;
emacs 查找替换字符串 M-% (然后会出现Query replace的字样) Query replace:<被替换字符串> Query replace <被替换字符串> with:<替换字符串> Query replacing <被替换字符串> with <替换字符串>: (? for help) **查询替换命令的选项如下: ** y 或者 空格 键 替换搜索到的字符串 n 或者 Del 键 取消替换搜索到的字符串 ^ 回到前一个搜索到的字符串 ! 替换所有没有替换的与模式匹配的字符串 ESC 键 退出本次查询搜索
MySQL str to datatime str_to_date(‘29-AUG-10 03.26.32 PM’,’%d-%b-%y %h.%i.%s %p’)
修改 MySQL 字符集 查看字符集设置 show variables like 'character_set_%'; set character_set_client=utf8; set character_set_connection=utf8; set character_set_database=utf8; set character_set_results=utf8; set character_set_server=utf8; set character_set_database=utf8; ..character_set_client ..character_set_connection ..character_set_database sudo emacs /etc/MySQL/my.cnf 在[client]下添加 default-character-set=utf8 在[MySQLd]下添加 default-character-set=utf8 (!!!MySQL 5.5.20 以后的版本要这样改 character-set-server=utf8) - 查看表编码 SHOW CREATE TABLE tbl_name; 改表的字符集. ALTER TABLE tbl_name CONVERT TO CHARACTER SET utf8; 重启MySQL; sudo /etc/init.d/MySQL restart; MySQL修改表、字段、库的字符集 http://fatkun.com/2011/05/MySQL-alter-charset.html/embed#?secret=tmPf4RUxzk http://www.unix.com/red-hat/168071-MySQL-MySQLd-fails-start.html
MySQL string to date MySQL中DATE_FORMAT(date, format)函数可根据format字符串格式化日期或日期和时间值date,返回结果串。 也可用DATE_FORMAT( ) 来格式化DATE 或DATETIME 值,以便得到所希望的格式。根据format字符串格式化date值: 下面是函数的参数说明: %S, %s 两位数字形式的秒 ( 00,01, . . ., 59) %i 两位数字形式的分 ( 00,01, . . ., 59) %H 两位数字形式的小时,24 小时 (00,01, . . ., 23) %h, %I 两位数字形式的小时,12 小时 (01,02, . . ., 12) %k 数字形式的小时,24 小时 (0,1, . . ., 23) %l 数字形式的小时,12 小时 (1, 2, . . ., 12) %T 24 小时的时间形式 (hh : mm : s s) ...
MySQL 函数 MySQL> select date_format(now(),'%Y-%m-%d'); MySQL> select time_format(now(),'%H-%i-%S'); -- 连接字符串, CONCAT select CONCAT('My', 'S', 'QL');
emacs 配置/config 中文环境 之后,在~/.Xresources (如果没有的话,自己建一个) ,加入下面内容: Xft.antialias: 1 Xft.hinting: 1 Xft.hintstyle: hintfull 调用X Window系统中的字体,并且开启抗锯齿。 之后在~/.emacs下面加入 (custom-set-variables ;; custom-set-variables was added by Custom. ;; If you edit it by hand, you could mess it up, so be careful. ;; Your init file should contain only one such instance. ;; If there is more than one, they won't work right. '(inhibit-startup-screen t)) (custom-set-faces ;; custom-set-faces was added by Custom. ;; If you edit it by hand, you could mess it up, so be careful. ;; Your init file should contain only one such instance. ;; If there is more than one, they won't work right. ) ; source: http://steve.yegge.googlepages.com/my-dot-emacs-file (defun rename-file-and-buffer (new-name) "Renames both current buffer and file it's visiting to NEW-NAME." (interactive "sNew name: ") (let ((name (buffer-name)) (filename (buffer-file-name))) (if (not filename) (message "Buffer '%s' is not visiting a file!" name) (if (get-buffer new-name) (message "A buffer named '%s' already exists!" new-name) (progn (rename-file filename new-name 1) (rename-buffer new-name) (set-visited-file-name new-name) (set-buffer-modified-p nil)))))) (setq frame-title-format "emacs@%b") ; Set default window size (setq default-frame-alist \`((height . 35) (width . 123))) ;; Set font ;;设置DejaVu Sans Mono为默认情况下的字体,字号为12号。 ;;然后再设置一个字符集,设置字符集字体为WenQuanYi Micro Hei(文泉驿微米黑),当编码为非拉丁字母时, ;;系统自动会在/etc/fonts/cond.avail中寻找编码,比如汉字,就对应han,泰文就对应thai,等等. (set-default-font "DejaVu Sans Mono-11") (set-fontset-font (frame-parameter nil 'font) 'han '("WenQuanYi Micro Hei")) ;; the following function is to scroll the text one line down while keeping the cursor (defun scroll-down-keep-cursor () (interactive) (scroll-down 3)) ;; set cursor as bar (setq-default cursor-type \`bar) ;; hide tool bar (tool-bar-mode 0) ;; hide menu bar (menu-bar-mode 0) ;; hide scroll bar (scroll-bar-mode 0) ;;enable select to clipboard (setq x-select-enable-clipboard t) ;;允许使用C-z作为命令前缀 (define-prefix-command 'ctl-z-map) (global-set-key (kbd "C-z") 'ctl-z-map) ;;用C-z i快速打开~/.emacs文件。 (defun open-init-file ( ) (interactive) (find-file "~/.emacs")) (global-set-key "\C-zi" 'open-init-file) ;;启用ibuffer支持,增强\*buffer\* (require \`ibuffer) (global-set-key (kbd "C-x C-b") \`ibuffer) ;show line number (global-linum-mode t) ;;auto backup (setq backup-by-copying t ;自动备份 backup-directory-alist '(("." . "~/.saves")) ;自动备份在目录"~/.saves"下 delete-old-versions t ;自动删除旧的备份文件 kept-new-versions 6 ;保留最近的6个备份文件 kept-old-versions 2 ;保留最早的2个备份文件 version-control t) ;多次备份 ;显示光标所在的行号列号 (setq column-number-mode t) http://murphytalk.github.io/posts/2005/03/03/gai-bian-emacschuang-kou-biao-ti-ge-shi/#.WJpliCFNzWU ...
MySQL 复制 1, MySQL的复制原理以及流程。 先问基本原理流程,3个线程以及之间的关联。 答: MySQL复制的三个线程: 主库线程,从库I/O线程,从库sql线程; 复制流程: (1) I/O线程向主库发出请求 (2) 主库线程响应请求,并推binlog日志到从库 (3) I/O线程收到线程并记入中继日志 (4) Sql线程从中继日志读取sql,并记入从库binlog日志,flush进硬盘; (2) 再问一致性延时性,数据恢复; 答: (1) 主从复制一致性由binlog执行顺序保证 (timespan+pos) ; 日志越详细,主从一致性越容易保证; (2) 延时性: 延时表现为behind_master_pos后面的数字,其实并不准确; 5.5.30以前版本都属于异步复制,因此都有延时。因为是主库执行完成后从库才执行,一先一后就有了延迟; 主从延迟的准确计算方法是: 延迟时间=从库执行sql完成的时刻-主库开始执行sql的时间; (3) 数据恢复: 备份时记录的binlog位置点 (timespan+pos) ; (3) 再问各种工作遇到的复制bug的解决方法; 答: 这个问题感觉描述并不准确,不清楚是主从复制故障还是bug; 故障一般由于主键冲突,链接不上主库,找不到对应的binlog位置等引起; 解决方法是跳过冲突,检查主从链接,找正确的pos; bug不常见,笔者碰到过一次,分享如下: 环境: 主库从库都是虚机,每十分钟与宿主机同步一次时间,大约每次与主机相差2秒; 表现: 从库复制时重复执行两秒之内的日志; 从库show slave status\G,behind_master_pos在60000和0之间循环,每两秒一次; 2, MySQL中myisam与innodb的区别,至少5点。 (1) 问5点不同 答: 1、 存储成本不一样,存储限制不一样; 2、CPU使用成本不一样,innodb缓存数据和索引; 3、锁粒度不一样,支持MVCC; 4、缓存机制不一样(buffer_pool和key_buffer) 5、事务支持; 6、索引支持: 全文索引(myisam),外键(innodb),hash(innodb) 7、读写速度; 8、备份; (2) 、问各种不同MySQL版本的2者的改进; 最近测5.1.38和5.5.35 Innodb: (1) adeptive_innodb_index可控; (2) innodb变为默认引擎; ...
MySQL basic install # client sudo pacman -S mariadb-clients # server + client sudo pacman -S mariadb mariadb-install-db --user=mysql --basedir=/usr --datadir=/var/lib/mysql systemctl start mysql ### 查看有哪些数据库 show databases; ### 创建数据库, 数据库名 mydb create database db_0; #创建数据库指定数据库的字符集 create database mydb character set utf8; ### 创建新用户 user_0 CREATE USER user_0 IDENTIFIED BY 'password_0'; ### 授权用户 user0 拥有数据库 database_0 的所有权限 grant all privileges on newbee_mall.* to user_0@'%' identified by 'password_0'; # 表, 增加字段 ALTER TABLE table_name ADD field_name field_type; alter table tbl_user add email varchar(255) NOT NULL; 查看表结构 desc table_name; mysqldump mysqldump -h 192.168.50.100 -uroot -p --databases rssx --tables user --where=user_id='0' mysql GUI client for Linux Jetbrain.Datagrip ...
linux CLI 作为 Linuxer,必须具备一定的 CLI 操作能力。有时候用 CLI 会比用 GUI 会更方便快捷。 —-lcan http://lcan.info/2011/03/cli-software/#comment-53 以下列出我所知道的一些常用 CLI 软件,仅供参考。 中文终端。据我所知,目前主要有两个解决方案: zhcon 和 fbterm。两个我都用过,zhcon 较长时间不更新了,问题比较多。不小心加错参数,甚至可能会导致死机。所以我推荐 fbterm,这个还是很不错的,要使用的话,必须开启 framebuffer。虽然某些方面也有些瑕疵,不过就目前而言,应该算是一个比较好用的中文终端了。有人可能会问: “中文输入怎么解决?“嘿嘿,这个倒不用担心。比较简陋的有 fbterm_ucimf,另外还有基于 ibus 的 ibus-fbterm 可供选择。 多窗口管理神器: tmux。功能和 screen 差不多,不过我感觉 tmux 更加强大、友好!可以横着切、竖着切窗口。让你充分利用你的屏幕!实乃远程管理、多任务控之必备神器啊! 文件管理器: vim 风格的可以选 ranger,另外还有 mc 之类的。 任务管理器: htop。这个可以理解为 top 的加强版。 音乐播放器: moc。这个用来播放 mp3,wma,flac 等常见音频文件还是不错的,但是不支持 ape 和 cue。如果这类文件比较多的,那就只能另寻他方了。cmus 也不支持 ape。 视频播放器: mplayer。说这个之前,我想咆哮几句: 是谁说 Linux 终端下只能用字符方式看视频啊!!!!是谁说在终端下看视频纯属找虐 啊!!!!!乃们这是误人子弟啊!!!!有木有听说过 framebuffer!!!!有木有!!!!有木有听说过 fbdev 输出!!!!!有木 有!!!!!! 我以前被人误导,也一直认为在 tty 终端下只能以字符方式看视频,但是直到有一天,我无意中了解到了有 framebuffer 这个东西!!!!无意中看到 mplayer 的视频输出里有 fbdev!!!!于是在开启了 framebuffer 的 tty 下。 mplayer -vo fbdev2 “我要看的视频” 我看到了神马?!我看到了一个清晰的带颜色输出的视频,竟然和在图形界面下播放时的质量差不了多少!!!!有木有看到!!!有木有!!!! PDF/图片查看器: fbida。fbida 里面包含了fbi,fbgs,ida,exiftran 四个应用。其中 fbi 可以用来查看图片 (FBI啊,名字就很牛X) ,fbgs 可以用来查看 PDF。前提嘛,估计各位看软件名就知道了,必 须开启 framebuffer。 截图工具: fbgrab。不废话,看官方说明: fbgrab – takes screenshots using the framebuffer。在桌面环境下可以用scrot这个命令行软件截屏。 IM 软件: finch。这个可以看成是 pidgin 的 CLI 版。 IRC 聊天: irssi。一个很强大的 IRC 客户端。 邮件客户端: mutt。有关介绍请移步 wiki。这个我基本不用。 RSS 阅读器: snownews。 屏幕录像: recordmydesktop。此软件可用于录制 GNOME、KDE 等桌面。
accord, grant https://www.tjxz.cc/11067 give、accord、award、confer、grant、endow、present与bestow这组动词均含有“给予、赠给”之意。 give 最普通用词,泛指将自己的东西给予他人,所给予的东西,物质或非物质的均可。 She gave us a set of saucepans as a wedding present. 她送我的结婚礼物是一套深平底锅。 Can you give me a date for another appointment? 我能再和您约个时间吗? They never gave me a chance/choice. 他们从来就没给过我机会/选择余地。 Has the director given you permission to do that? 主任允许你那样做了吗? accord 侧重所给予的是应得的或是恰当的,或是因某种原因而适于接受的。 The massed crowds of supporters accorded him a hero’s welcome. 蜂拥云集的支持者们给予他英雄般的欢迎。 Certainly in our society teachers don’t enjoy the respect that is accorded to doctors and lawyers. 的确,在我们这个社会中,老师没有得到像医生和律师所受到的那种尊敬。 ...
gdb GDB是Linux下非常好用且强大的调试工具。GDB可以调试C、C++、Go、java、 objective-c、PHP等语言。对于一名Linux下工作的c/c++程序员,GDB是必不可少的工具 readelf -S main|grep debug # 查看寄存器的值 i registers # 以上输出不包括浮点寄存器和向量寄存器的内容。使用“i all-registers”命令,可以输出所有寄存器的内容 i all-registers # 打印单个寄存器的值,可以使用“i registers regname”或者“p $regname”,例如: i registers rsi # 用 gdb 调试 hello gdb ./hello # 在 _start 函数处添加一个断点 (gdb) b _start # run (gdb) r # 显示汇编代码, => 表示下一步要执行的行 (gdb) disassemble /m _start # 逐指令往后运行 (gdb) stepi # 查看寄存器的值 (gdb) i registers
godaddy 买域名 在Godaddy搜索某个关键字, 比如 wiloon 在列表里找一个喜欢的或者价格低的, 有很多首年1.x$的, 比如 wiloon.online 购买并支付, 支付方式可以用 paypal. cloudflare> add site> free> 添加解析记录 type: A name: @ ipv4 address: proxy: false (DNS only) Save (保存设置然后等 DNS 生效) 配置域名解析, 配置到某一个 vps, DNS> Nameservers> Change Nameservers
sketch, 素描 素描的学习过程: 1石膏几何体. 2素描静物 3人物 学习石膏几何体和静物会解决的问题: 基本的绘画技巧、比例、构图、黑白灰、空间、虚实等,建立绘画思维和观察方法。 三:为什么要先学素描? 搞清楚素描学习的目地 素描学习是对绘画意识和能力的培养,不要只是去学习套路的技法,不然就失去了素描学习的意义。 说的简单点,素描会解决形,色,空间,体积,基本的透视关系,画面关系等问题。所有的视觉艺术(摄影,电影,设计,绘画)都会涉及到这些,重要性显而易见。 有很多学生一开始就会给老师说,我想学水彩,想学油画,不学素描太枯燥了。 如果你是想真学到东西,不了解素描你可能永远都是外行,除了我们的中国画,西方历史上的名家们谁没画过素描呢?只是有些艺术流派,有些艺术创作风格,特别是现代艺术,可能有些不需要很强的素描的基本功。但是他们都是画过大量的素描。 https://zhuanlan.zhihu.com/p/321783268
ubuntu install k8s ubuntu 24.04 安装 单节点 k8s sudo swapoff -a sudo sed -i '/swap/s/^/#/' /etc/fstab sudo apt-get update sudo apt-get install -y apt-transport-https ca-certificates curl # 安装 containerd, 我之前 已经 安装 了, 跳过这步 K8S_VER="v1.33.4" ARCH="amd64" # 下载二进制文件 curl -LO "https://dl.k8s.io/release/${K8S_VER}/bin/linux/${ARCH}/kubectl" curl -LO "https://dl.k8s.io/release/${K8S_VER}/bin/linux/${ARCH}/kubeadm" curl -LO "https://dl.k8s.io/release/${K8S_VER}/bin/linux/${ARCH}/kubelet" # 添加可执行权限 chmod +x kubectl kubeadm kubelet # 移动到系统 PATH 目录 sudo mv kubectl kubeadm kubelet /usr/local/bin/ /etc/systemd/system/kubelet.service [Unit] Description=kubelet: The Kubernetes Node Agent Documentation=https://kubernetes.io/docs/ After=containerd.service Wants=containerd.service [Service] ExecStart=/usr/local/bin/kubelet Restart=always StartLimitInterval=0 RestartSec=10 [Install] WantedBy=multi-user.target sudo systemctl daemon-reload sudo systemctl enable kubelet VERSION="v1.34.0" curl -LO https://github.com/kubernetes-sigs/cri-tools/releases/download/${VERSION}/crictl-${VERSION}-linux-amd64.tar.gz sudo tar -C /usr/local/bin -xzvf crictl-${VERSION}-linux-amd64.tar.gz crictl --version # 如果之前 有过 初始化 sudo kubeadm reset -f sudo systemctl stop kubelet # 初始化集群, kubeadm 会启动 kubelet 服务 sudo kubeadm init --pod-network-cidr=10.244.0.0/16 install Kubernetes 1.28.2 on Ubuntu 22.04 ...
无状态服务, stateless service https://blog.csdn.net/xiangxizhishi/article/details/79434749 一、定义 无状态服务(stateless service)对单次请求的处理,不依赖其他请求,也就是说,处理一次请求所需的全部信息,要么都包含在这个请求里,要么可以从外部获取到(比如说数据库),服务器本身不存储任何信息 有状态服务(stateful service)则相反,它会在自身保存一些数据,先后的请求是有关联的 二、优劣 有状态服务常常用于实现事务(并不是唯一办法,下文有另外的方案)。举一个常见的例子,在商城里购买一件商品。需要经过放入购物车、确认订单、付款等多个步骤。由于HTTP协议本身是无状态的,所以为了实现有状态服务,就需要通过一些额外的方案。比如最常见的session,将用户挑选的商品(购物车),保存到session中,当付款的时候,再从购物车里取出商品信息 有状态服务可以很容易地实现事务,所以也是有价值的。但是经常听到一种说法,即server要设计为无状态的,这主要是从可伸缩性来考虑的。如果server是无状态的,那么对于客户端来说,就可以将请求发送到任意一台server上,然后就可以通过负载均衡等手段,实现水平扩展。如果server是有状态的,那么就无法很容易地实现了,因为客户端需要始终把请求发到同一台server才行,所谓“session迁移”等方案,也就是为了解决这个问题 三、session和cookie 基于session和cookie都可以实现事务,可以认为,session是有状态的,而cookie是无状态的 四、无状态实现事务的方法 并不是一定要用有状态服务才能实现事务,本文提供另外的几种方案作为参考 举一个多次提交的场景作为例子:用户需要提交很多数据,分为2个页面提交 这里就涉及到2次http请求,第一次提交字段1、2、3,第二次提交字段4、5、6 用session很容易实现这个需求,server只需要将第一次提交的数据,保存在session里,然后返回第2个表单作为相应;然后取出第一次提交的数据,和第二次提交的数据汇聚以后,一起存入数据库即可 不用session同样也可以实现,server接收到第一次请求以后,将数据作为隐藏元素,放在第2个表单里返回;这样用户第2次提交的时候,就隐含地再次提交了第一次的数据;server将所有数据存入数据库 用HTML5,则还可以进一步优化,client可以将第一次提交的数据,保存在sessionStorage里 用cookie也是类似的道理,同样可以实现,但是不太好 总的来说,3种替代方案(隐藏表单元素、sessionStorage、cookie)都避免了在server端暂存数据,从而实现了stateless service。本质上,这3种方案的请求里,都包含了所有必须的数据,符合本文一开始的定义 五、将有状态服务转换成无状态服务 根据本文一开始的定义,除了将所有信息都放在请求里之外,还有另外一种方法可以实现无状态服务,即将信息放在一个单独可共享的地方,独立于server存在 比如,同样还是采取session的方式,在服务端保存数据,减少每次client请求传输的数据量(节省流量);但是将session集中存放,比如放在单独的session层里。这种情况下,server同样是无状态的,可以做水平扩展 六、无状态类 引申一下,JAVA里有一种类的设计,可以称为无状态类。这种类的特征是只有方法没有字段,在三层架构(展现层、逻辑层、持久层)里,逻辑层经常可以看到这种类 我觉得无状态类和stateless server在思想上是一样的,这个类本身是没有状态的,所以当外部要调用它的方法时,需要在方法参数中传来所需的所有信息,不依赖该类自身的状态(字段值),在并发环境下,可以避免多线程带来的副作用 七、总结 有状态服务可以比较容易地实现事务,在不需要考虑水平扩展时,是比较好的选择 无状态服务的优势在于可以很方便地水平伸缩,但是在实现事务时,需要做一些额外的动作 可以通过剥离session等方法,将一个有状态服务,转换成无状态服务 关于这个话题,下面这个链接也不错: http://stackoverflow.com/questions/4495950/how-do-stateless-servers-work
`— title: Ansible author: “-” date: 2015-10-14T07:14:28+00:00 url: Ansible categories: inbox tags: reprint Ansible https://linuxtoy.org/archives/hands-on-with-ansible.html 最近纠结于在 Puppet、Chef、SaltStack、Ansible 等一干配置管理工具中如何选择。考虑到一旦开始没有选好,以后更改又是一堆麻烦事,所以就稍微有些慎重。 Puppet 和 SaltStack 我曾用过,但不是十分符合预期,所以先行排除。至于 Chef,虽然老早就听说过,但却一直没有找到机会尝试。翻了翻文档,Chef 跟 Puppet 及 SaltStack 也是一样采用服务端/客户端模式,对于在现有一定数量的机器上部署仍然有 些麻烦。最后落单到 Ansible 上。经过对 Ansible 的把玩,我感觉 Ansible 于我比较相投。我喜欢 Ansible 的方面包括: 充分利用现有设施。使用 Ansible 无需安装服务端和客户端,只要 SSH 即可。这意味着,任何一台装有 Ansible 的机器都可以成为强大的管理端。我觉得,这种去中心化的思路显得更为灵活。可能有人会担心 SSH 的效率,Ansible 的并行执行及加速模式或许可以打消你的顾虑。 使用简单,快速上手相当容易。我在用 Puppet 之前,就没少花时间钻研它。想想吧,我们使用这类自动化管理工具不就是想把自己从重复的、复杂的事情中解放出来么?为了简化一件事,而沉入另一件复杂的事,是不是有些不划算?从我的体验来看,Ansible 上手十分快,用 Ad-Hoc 可以应付简单的管理任务,麻烦点的也可以定义 Playbook 文件来搞定。 采用人类易读的格式。Ansible 的主机定义文件使用 INI 格式,支持分组,能够指定模式;此外也能动态生成,这对管理云主机应当很有用。而 Playbook 则是 YAML 格式,我觉得它比 Puppet 的 DSL 要易读易写多了。 能够使用你熟悉的语言来编写模块。虽然 Ansible 是使用 Python 开发的,但它不会将你限制到某种具体的编程语言,Bash、Python、Perl、Ruby 等等都可以,你擅长什么就用什么。 一言以蔽之,Ansible 背后的简单化哲学深得我心。这也比较符合我选择软件的一贯原则。可能还有人会比较关心目前 Ansible 都有谁在用。毕竟,榜样的力量是无穷。Puppet 不正是因为 Google 在用而吸引了不少眼球么?据我所知,当前使用 Ansible 较为知名的用户包括 Fedora、Rackspace、Evernote 等等。 ...
分组 首先我们来了解下分组的概念。所谓分组,就是将一个数据包分成一个个更小的数据包。例如对于一个10GB的数据包,总不可以一次性发送过去吧,而是把它分成若干个小的数据包发送过去。 文件头一般是一些说明性数据,例如源地址和目标地址,数据类型等。数据部分就是真正要传达给对象的内容 电路交换 所谓交换,指的就是服务器与服务器之间的数据交换。数据传输交换的方式有几种,而电路交换便是其中的一种。 假如A和B之间要进行通信,我们就假设A要和E打个电话吧。当A输入E的电话号码,开始拨号之后,那么服务器要做的第一件事就是根据E的电话号码找到E在哪里,由于A通往E的路径有多条,会根据某种算法找到E之后,建立一条通路,然后进行数据的传输。 我们假设选的路径是A–>D—>E 找到一条通往E的路径并建立会话的过程中,我们称之为电路交换的第一阶段—建立连接。之后A和E在通话的过程中会始终霸占着这条路径,数据传输的过程称为电路交换的第二阶段—数据传输。 电路交换的第三阶段,也就是最后一个阶段—释放连接。A和B只要有一方挂了电话,那便了开始释放连接。 传输例题图: 在这个过程中,新建连接需要花销一定的额外时间 (想象你打电话的时候是不是出现正在拨号的字眼) ,释放连接也会花销一些额外的时间。 那么,电话交换的过程中,数据需要分组来传送吗? 答是不用的,因为电话交换的过程中,A和B两个人始终霸占着一条通信电路,他们每说一句话,都会实时被对方获取,因此数据是不用分组的。 从这也可以看出,电路交换的方式,在数据的传输上是比较高效、实时的,只要A一发出数据,E立马就能收到了,这也是为什么我们的电话通信使用的是电路交换的方式。 但由于一直霸占着这条路径,假如霸占的过程中A与E都在沉默不说话,那么将是对这条路径的极大浪费。因此,电路连接的方式资源的利用率是比较低的。 而且,如果你通话的时间超级短,可能花在新建连接的时间比通话的时间还要长,这就更加难受了。 稍微总结一下 电路连接的三个阶段: 建立连接。 数据传输。 释放连接。 优点: 传输速度快、高效。 实时。 缺点: 资源利用率低。 新建连接需要占据一定的时间,甚至比通话的时间还长。 分组交换 从名字分组字眼,我们就可以知道,这种方式数据包是分组成更小的数据包进行传输的。分组交换的数据传输过程和电路交换不一样,分组交换采取存储转发传输的机制。我们下面还是以A给E传输数据作为例子来讲解。 假如A要给E发送一个数据包P,但这个数据包有点大,需要分成三组,例如分成p1,p2,p3三个更小的数据包。 这时A给E传输数据不需要新建连接这个过程,即不需要寻找一个通往E的路径。而且A直接把小的数据包丢给附近的路由器,然后A就不管了,例如A把p1丢给了B,这个时候A就不在去管p1的,当B收到p1这个完整的小数据包之后,B再丢给E。 但是A不一定都会把剩下的数据包都丢给B,有可能会把其他的数据包p2丢给C,之后再把p3丢给D,然后C和D在转发丢给E。这些都是不确定的,会根据某种算法的选择路由器。 这里有一个关键词存储,就是说,B必须收到完整的p1数据包后才能进行转发,这也不难理解,因为p1数据包包含E的地址,如果不是完整的数据包,B也不知道该发给谁啊。 示例图: 从电路交换的机制我们可以看出如下的一些问题: 由于A把数据包丢给B之后就不管了,B什么时候会把p1转发出去,谁也不知道,而且可能B会绕几个圈子再发给E也是有可能的。因为,电路交换的机制在数据传输方面不具有实时性。 而且,很有可能会有很多路由器把数据包丢给B,这个时候就会造成通信阻塞,这时可能p1只能排队等待B来发送。 由于B路由器的容量是有限的,如果有太多的数据包丢给它,它可能会容纳不下,这时候就可能会出现丢包的情况。 再者,由于p1,p2,p3数据包都有文件头,里面都包含了A和E的一些信息,当然还有其他的信息。可以说这些文件头有很多重复的数据,因此分组交换发送的数据具有很多的重复无用数据。 当然,分组交换还包括时延的缺点,因为B必须收到一个完整的p1才能把p1转发出去,因为这个接受存储的过程中存在时延,这种时延也成为传输时延,当然还存在传播时延和处理时延等。所谓处理时延就是每次都得检查这个数据包的文件头和决定将该数据包传输给谁。 说了电路交换的这么多缺点,那总得有优点吧? 实际上,上面的那些缺点,其实都不是什么大问题的。电路交换最主要的优点就是设计简单,资源利用率高了。 总结下分组交换 分组交换采用把一个个小的数据包存储转发传输的机制。 主要的一些缺点: 不具有实时性。 存在延时。 会造成通信阻塞。 存在无用的重复数据。 会出现丢包的情况。 致命的优点: 设计简单。 资源利用率很高。 生活中的通信选择 两种交换传输的特点决定了我们平时的电话通信使用的是电路交换,像互联网中的微信等这种不要求实时的通信用分组交换。 这也就是为什么急事的时候会打电话,因为比较实时嘛。像微信这些,有时你发个信息,可能网络不好的话,或者太多人在同时使用的话,可能你的信息要过一阵子对方才能收到。 这里可能有些人会说,分组交换为何要把数据包分成一小个来存储转发呢?一个大的数据包发过去不好吗? 假如你的一个数据包100GB,那B这个路由器就得能存100GB的容量,可是发100GB的概率是极少数的,那把路由器设计成100GB不是很浪费?这也是为什么要分组成小数据包的原因之一。 当然,还有一种报文交换的方式,就是一整个数据包存储转发的,不过这种方式使用的比较少,再此就不详细展开了。 https://zhuanlan.zhihu.com/p/44316491
“apisix” 启动etcd apisix podman run -d \ --name apisix \ -v apisix-logs:/usr/local/apisix/logs \ -v apisix-conf:/usr/local/apisix/conf \ -v /etc/letsencrypt/live/wiloon.com-0001:/usr/local/apisix/cert \ -p 9180:9180 \ -p 9080:9080 \ -p 443:9443 \ apache/apisix allow admin allow_admin: # http://nginx.org/en/docs/http/ngx_http_access_module.html#allow - 192.168.50.116/24 # If we don’t set any IP list, then any IP access is allowed by default. 修改etcd 地址 etcd: host: - "http://192.168.50.101:2379" test curl "http://192.168.50.101:9080/apisix/admin/services/" -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' build apisix-dashboard buildah bud -f Dockerfile -t apisix-dashboard:1.5 . run apisix dashboard podman run -d \ --name apisix-dashboard \ -p 80:80 \ -v apisix-dashboard-config:/etc/nginx/conf.d/ \ -v /etc/localtime:/etc/localtime:ro \ nginx 设置 Upstream 创建 id 为 50 的上游信息 ...
coupling relationship, 耦合关系 耦合 不同模块之间的关系就是耦合,根据耦合程度可以分为 7 种,耦合度依次变低。 内容耦合 公共耦合 外部耦合 控制耦合 标记耦合 数据耦合, Data Coupling 非直接耦合 内容耦合 内容耦合是最紧的耦合程度,一个模块直接访问另一模块的内容,则称这两个模块为内容耦合。 公共耦合 一组模块都访问同一个全局数据结构,则称之为公共耦合。 外部耦合 一组模块都访问同一全局简单变量,而且不通过参数表传递该全局变量的信息,则称之为外部耦合。外部耦合和公共耦合很像,区别就是一个是简单变量,一个是复杂数据结构。 控制耦合 模块之间传递的不是数据信息,而是控制信息例如标志、开关量等,一个模块控制了另一个模块的功能。 从控制耦合开始,模块的数据就放在自己内部了,不同模块之间通过接口互相调用。 标记耦合 调用模块和被调用模块之间传递数据结构而不是简单数据,同时也称作特征耦合。 数据耦合, Data Coupling 调用模块和被调用模块之间只传递简单的数据项参数。相当于高级语言中的值传递。 非直接耦合 两个模块之间没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的。耦合度最弱,模块独立性最强。 子模块无需知道对方的存在,子模块之间的联系,全部变成子模块和主模块之间的联系。 内聚 偶然内聚 逻辑内聚 时间内聚 通信内聚 顺序内聚 功能内聚 https://yanhaijing.com/program/2016/09/01/about-coupling/