CentOS 镜像站

centos 国内镜像站

.

http://mirrors.aliyun.com/centos/7/isos/x86_64/ 阿里云开源镜像
https://mirrors.cnnic.cn/centos/7/isos/x86_64/ 清华大学开源镜像

http://centos.ustc.edu.cn/centos/7/isos/x86_64/ 中国科学技术大学
http://ftp.sjtu.edu.cn/centos/7/isos/x86_64/ 上海交大

http://mirrors.163.com/centos/7/isos/x86_64/ 网易
http://mirrors.cn99.com/centos/7/isos/x86_64/ 网易开源镜像站
http://mirrors.sohu.com/centos/7/isos/x86_64/ 搜狐

 

.

 

 

发表在 linux | CentOS 镜像站已关闭评论

mysql initialize

1 初始化数据:

/usr/local/mysql/bin/mysqld --initialize-insecure --user=mysql --datadir=/opt/mysql/data --basedir=/opt/mysql

2 配置文件

vim /etc/my.cnf

[mysqld]
basedir=/usr/local/mysql
datadir=/usr/local/mysql/mydata
socket=/tmp/mysql.sock
log_error=/var/log/mysql.log
user=mysql
port=6606
[mysql]
socket=/tmp/mysql.sock

作用:
1.影响服务端的启动
标签: [mysqld] [mysqld_safe] [server] ...

[mysqld]
basedir=/opt/mysql
datadir=/opt/mysql/data
user=mysql
socket=/tmp/mysql.sock
port=3306
server_id=6

2.影响客户端连接
标签: [client] [mysql] [mysqldump] ....

[mysql]
socket=/tmp/mysql.sock

=======================

3 多实例(3307 3308 3309)

3.1 创建相关目录
mkdir -p /data/330{7..9}/data

3.2 创建配置文件
cat>> /data/3307/my.cnf<<EOF
[mysqld]
basedir=/opt/mysql
datadir=/data/3307/data
user=mysql
socket=/data/3307/mysql.sock
port=3307
server_id=3307
EOF

cp /data/3307/my.cnf /data/3308
cp /data/3307/my.cnf /data/3309

sed -i 's#3307#3308#g' /data/3308/my.cnf
sed -i 's#3307#3309#g' /data/3309/my.cnf

3.3 初始化数据
mysqld --initialize-insecure --user=mysql --datadir=/data/3307/data --basedir=/opt/mysql
mysqld --initialize-insecure --user=mysql --datadir=/data/3308/data --basedir=/opt/mysql
mysqld --initialize-insecure --user=mysql --datadir=/data/3309/data --basedir=/opt/mysql

3.4 启动多实例
chown -R mysql.mysql /data/*
mysqld_safe --defaults-file=/data/3307/my.cnf &
mysqld_safe --defaults-file=/data/3308/my.cnf &
mysqld_safe --defaults-file=/data/3309/my.cnf &

4 测试

netstat -lnp|grep 330

mysql -S /data/3307/mysql.sock
mysql -S /data/3308/mysql.sock
mysql -S /data/3309/mysql.sock

5 systemd管理多实例

cat >> /etc/systemd/system/mysqld3307.service <<EOF
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/opt/mysql/bin/mysqld --defaults-file=/data/3307/my.cnf
LimitNOFILE = 5000
EOF
cp /etc/systemd/system/mysqld3307.service /etc/systemd/system/mysqld3308.service
cp /etc/systemd/system/mysqld3307.service /etc/systemd/system/mysqld3309.service
sed -i 's#3307#3308#g' /etc/systemd/system/mysqld3308.service
sed -i 's#3307#3309#g' /etc/systemd/system/mysqld3309.service

systemctl start mysqld3307
systemctl start mysqld3308
systemctl start mysqld3309
netstat -lnp|grep 330
systemctl stop mysqld3309
systemctl stop mysqld3308
systemctl stop mysqld3307
systemctl enable mysqld3307
systemctl enable mysqld3308
systemctl enable mysqld3309

6.忘记密码处理

mysqladmin -uroot -p password 123

select user,authentication_string,host from mysql.user;

1.停数据库
/etc/init.d/mysqld stop
2.启动数据库为无密码验证模式
mysqld_safe --skip-grant-tables --skip-networking &
update mysql.user set authentication_string=PASSWORD('456') where user='root' and host='localhost';
/etc/init.d/mysqld restart

[root@standby ~]# mysql -uroot -p123
[root@standby ~]# mysql -uroot -p456

 

7.数据类型和字符集

整型
int 最多存10位数字
-2^31 ~ 2^31-1
2^32 10位数 11
浮点

字符串类型
char 定长,存储数据效率较高,对于变化较多的字段,空间浪费较多
varchar 变长,存储时判断长度,存储会有额外开销,按需分配存储空间.
enum
时间
datetime
timestamp
date
time

SQL语句规范第五条:
1.少于10位的数字int ,大于10位数 char,例如手机号
2.char和varchar选择时,字符长度一定不变的可以使用char,可变的尽量使用varchar
在可变长度的存储时,将来使用不同的数据类型,对于索引树的高度是有影响的.
3.选择合适的数据类型
4.合适长度

 

转自:https://www.cnblogs.com/zhaijihai/p/10274860.html

 

发表在 db | mysql initialize已关闭评论

可用性SLA指标

备忘:

服务可用性

计算方式:(服务运行时间-服务不可用时间)/ 系统运行时间 X 100%

-----------------------

SLA:服务等级协议(简称:SLA,全称:service level agreement)。
是在一定开销下为保障服务的性能和可用性。
网站服务可用性SLA,9越多代表全年服务可用时间越长服务更可靠,停机时间越短,反之亦然。
互联网公司喊口号,我们今年一定要做到3个9、4个9的含义
1年 = 365天 = 8760小时
99.9 = 8760 * 0.1% = 8760 * 0.001 = 8.76小时
99.99 = 8760 * 0.0001 = 0.876小时 = 0.876 * 60 = 52.6分钟
99.999 = 8760 * 0.00001 = 0.0876小时 = 0.0876 * 60 = 5.26分钟
全年停机5.26分钟才能做到99.999%,即5个9

----------------------

1) 首先计算全年的总小时数:

365 * 24 = 8760 (时)

2) 3个9的标准

(365 * 24)* (1 - 99.9%) = 8760 (时) * 0.001= 8.76 (时)

3) 4个9的标准

(365 * 24)* (1 - 99.99%) = 8760 (时)* 0.0001 = 0.876 * 60 = 52.56 (分)

4) 5个9的标准

(365 * 24)* (1 - 99.999%) = 8760 (时) * 0.00001 = 0.0876 (时) * 60 = 5.256 (分)

 

发表在 article | 可用性SLA指标已关闭评论

局域网主机检测备忘

 

windows:

连通性检查:
ping -4 主机名

获取主机名及MAC地址:
nbtstat -A IP

发表在 article | 局域网主机检测备忘已关闭评论

Excel copy/paste | 复制/粘贴 CPU高至卡死常见解决备忘

使用Excel时遇到---- 复制粘贴就卡死,CPU很高,记录下解决方法备忘:

打开Excel

在命令行中输入  Excel /safe 打开Excel

解决方法:

1. 文件功能界面 -> 选择“选项”

2.点击“加载项”功能

3.在管理功能框中,选择“COM 加载项” 并点击转到

4.清除列表中的所有复选框

5.关闭重新启动

 

 

 

.

发表在 article | Excel copy/paste | 复制/粘贴 CPU高至卡死常见解决备忘已关闭评论

性能指标:QPS、TPS、系统吞吐量理解

一、QPS,每秒查询

QPS:Queries Per Second意思是“每秒查询率”,是一台服务器每秒能够相应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。

互联网中,作为域名系统服务器的机器的性能经常用每秒查询率来衡量。

二、TPS,每秒事务

TPS:是TransactionsPerSecond的缩写,也就是事务数/秒。它是软件测试结果的测量单位。一个事务是指一个客户机向服务器发送请求然后服务器做出反应的过程。客户机在发送请求时开始计时,收到服务器响应后结束计时,以此来计算使用的时间和完成的事务个数。

QPS vs TPS:QPS基本类似于TPS,但是不同的是,对于一个页面的一次访问,形成一个TPS;但一次页面请求,可能产生多次对服务器的请求,服务器对这些请求,就可计入“QPS”之中。如,访问一个页面会请求服务器2次,一次访问,产生一个“T”,产生2个“Q”。

三、RT,响应时间

响应时间:执行一个请求从开始到最后收到响应数据所花费的总体时间,即从客户端发起请求到收到服务器响应结果的时间。

响应时间RT(Response-time),是一个系统最重要的指标之一,它的数值大小直接反应了系统的快慢。

四、并发数

并发数是指系统同时能处理的请求数量,这个也是反应了系统的负载能力。

五、吞吐量

系统的吞吐量(承压能力)与request对CPU的消耗、外部接口、IO等等紧密关联。单个request 对CPU消耗越高,外部系统接口、IO速度越慢,系统吞吐能力越低,反之越高。

系统吞吐量几个重要参数:QPS(TPS)、并发数、响应时间。

QPS(TPS):(Query Per Second)每秒钟request/事务 数量
并发数: 系统同时处理的request/事务数
响应时间: 一般取平均响应时间

理解了上面三个要素的意义之后,就能推算出它们之间的关系:

QPS(TPS)= 并发数/平均响应时间
并发数 = QPS*平均响应时间

六、实际举例

我们通过一个实例来把上面几个概念串起来理解。按二八定律来看,如果每天 80% 的访问集中在 20% 的时间里,这 20% 时间就叫做峰值时间。

公式:( 总PV数 * 80% ) / ( 每天秒数 * 20% ) = 峰值时间每秒请求数(QPS)
机器:峰值时间每秒QPS / 单台机器的QPS = 需要的机器

1、每天300w PV 的在单台机器上,这台机器需要多少QPS?
( 3000000 * 0.8 ) / (86400 * 0.2 ) = 139 (QPS)

2、如果一台机器的QPS是58,需要几台机器来支持?
139 / 58 = 3

七、最佳线程数、QPS、RT

1、单线程QPS公式:QPS=1000ms/RT

对同一个系统而言,支持的线程数越多,QPS越高。假设一个RT是80ms,则可以很容易的计算出QPS,QPS = 1000/80 = 12.5
多线程场景,如果把服务端的线程数提升到2,那么整个系统的QPS则为 2*(1000/80) = 25, 可见QPS随着线程的增加而线性增长,那QPS上不去就加线程呗,听起来很有道理,公司也说的通,但是往往现实并非如此。

2、QPS和RT的真实关系

我们想象的QPS、RT关系如下,

实际的QPS、RT关系如下,

3、最佳线程数量
刚好消耗完服务器的瓶颈资源的临界线程数,公式如下
最佳线程数量=((线程等待时间+线程cpu时间)/线程cpu时间)* cpu数量
特性:

在达到最佳线程数的时候,线程数量继续递增,则QPS不变,而响应时间变长,持续递增线程数量,则QPS开始下降。
每个系统都有其最佳线程数量,但是不同状态下,最佳线程数量是会变化的。
瓶颈资源可以是CPU,可以是内存,可以是锁资源,IO资源:超过最佳线程数-导致资源的竞争,超过最佳线程数-响应时间递增。

————————————————

版权声明:本文为CSDN博主「技术大咖秀」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/shipfei_csdn/article/details/103225517

 

发表在 info | 性能指标:QPS、TPS、系统吞吐量理解已关闭评论

位、字节、字符、兆、吉转换与网络传输速率,硬盘容量计算(备忘)

网络空间换算单位

1)bit = 位:是二进制中的一位,是计算机表示数据的最小单位,也就是说是二进制中01中的一位

2)字节:byte = B = Byte = 字节 ,是计算机存储的最小单位 ,1byte = 1B = 1Byte = 1 字节 = 8bit

3)字符:字符>=字节,1个英文字母 = 1字节 = 8 bit, 1 个中文字符 = 2字节 = 16bit


1Byte=8bit,1KB=1024B,1MB=1024KB,1GB=1024MB,1TB=1024GB
在计算机/通讯行业中,计算数据传送速度也使用每秒传送公制数据量来计算

1 bit (b) = 0 or 1 = one binary digit 一个二进制位元
1 kilobit(kb)=10^3 bits = 1,000 bits 一千位元
1 Megabit(Mb)=10^6 bits = 1,000,000 bits 一百万位元
1 Gigabit(Gb)=10^9 bits = 1,000,000,000 bits 一万亿位元


传输速率

根据进制规定,传送速度可以有两种表示方法 bps 和 Bps,但是他们是有严格区别。Bps中的 B 使用的是二进制系统中的Byte字节 ,bps中的 b 是十进制系统中的位元。

在我们常说的56K拨号,100M局域网都是bps计量,当用于软件下载时,下载工具一般又以Bps计算,所以它们之间有 8 bit=1 Byte 的换算关系,那么56Kbps拨号极限下载速度是 56Kbps/8=7KBps 每秒下载7K字节 。


数据存储

在数据存储,容量计算中,一般又结合公制的进制和二进制的数据计算方法来计算
(二进制)

1 byte (B) = 8 bits (b) 字节=8个二进制位
1 Kilobyte(K/KB)=2^10 bytes=1,024 bytes 千字节
1 Megabyte(M/MB)=2^20 bytes=1,048,576 bytes 兆字节
1 Gigabyte(G/GB)=2^30 bytes=1,073,741,824 bytes 千兆字节
1 Terabyte(T/TB)=2^40 bytes=1,099,511,627,776 bytes吉字节

一些存储器厂家特别是硬盘厂家就更紧密结合十进制来计算,这就是为什么操作系统显示的容量与厂家标示的容量有些一些差异的原因 (十进制)

1 byte (B) = 8 bits (b)
1 Kilobyte (K / KB) = 10^3 bytes = 1,000 bytes
1 Megabyte (M / MB) = 10^6 bytes = 1,000,000 bytes
1 Gigabyte (G / GB) = 10^9 bytes = 1,000,000,000 bytes
1 Terabyte (T / TB) = 10^12 bytes = 1,000,000,000,000 bytes

因此
500g的硬盘,实际只有1000/1024*500=488g左右

 

.

 

发表在 info | 标签为 , , , , | 位、字节、字符、兆、吉转换与网络传输速率,硬盘容量计算(备忘)已关闭评论

Liquid基础语法

摘录文章:

Output输出

简单输出示例:

  1. Hello {{name}}
  2. Hello {{user.name}}
  3. Hello {{ 'tobi' }}

Advanced output: Filters 高级输出:过滤器

输出标记需要的过滤器。过滤器是简单的方法。第一个参数在过滤器的左侧就是过滤器的输入,即需要过滤的内容。过滤器的返回值将是过滤器运行时过滤后的左侧的参数。当没有更多的过滤器,模板会收到结果字符串。

代码示例:

  1. Hello {{ 'tobi' | upcase }}
  2. Hello tobi has {{ 'tobi' | size }} letters!
  3. Hello {{ '*tobi*' | textilize | upcase }}
  4. Hello {{ 'now' | date: "%Y %h" }}

Standard Filters标准过滤器

  • date -时间格式化
  • capitalize-设置输入中的某个单词*
  • downcase-将输入的字符串转换为小写*
  • upcase-将输入的字符串转换为大写
  • first-获得传入的数组的第一个元素
  • last-获得传入的数组的最后一个元素
  • join-用数组的分隔符连接数组中的元素
  • sort-数组中的元素排序
  • map-通过指定的属性过滤数组中的元素
  • size-返回一个数组或字符串的大小
  • escape-转义一个字符串
  • escape_once-返回HTML的转义版本,而不会影响现有的实体转义
  • strip_html-从字符串去除HTML
  • strip_newlines -从字符串中去除所有换行符(\ n)的
  • newline_to_br-用HTML标记替换每个换行符(\ n)
  • replace-替换,例如:{{ 'foofoo' | replace:'foo','bar' }} #=> 'barbar'
  • replace_first-替换第一个,例如: '{{barbar' | replace_first:'bar','foo' }} #=> 'foobar'
  • remove-删除,例如:{{'foobarfoobar' | remove:'foo' }} #=> 'barbar'
  • remove_first-删除第一个,例如:{{ 'barbar' | remove_first:'bar' }} #=> 'bar'
  • truncate-截取字符串到第x个字符
  • truncatewords-截取字符串到第x个词
  • prepend-前置添加字符串,例如:{{ 'bar' | prepend:'foo' }} #=> 'foobar'
  • append-后置追加字符串,例如:{{'foo' | append:'bar' }} #=> 'foobar'
  • minus-减法,例如:{{ 4 | minus:2 }} #=> 2
  • plus-加法,例如:{{'1' | plus:'1' }} #=> '11', {{ 1 | plus:1 }} #=> 2
  • times-乘法,例如:{{ 5 | times:4 }} #=> 20
  • divided_by-除法,例如:{{ 10 | divided_by:2 }} #=> 5
  • split-通过正则表达式切分字符串为数组,例如:{{"a~b" | split:"~" }} #=> ['a','b']
  • modulo-取模,例如:{{ 3 | modulo:2 }} #=> 1

标记

目前支持的标记的列表:

  • assign -将某个值赋给一个变量
  • capture-标记文本赋值给一个变量
  • case-标准的case...when代码块
  • comment-块标记,注释掉该块中的文本
  • cycle-通常在循环中使用的值之间交替,如颜色或DOM类。
  • for-for循环
  • if-标准的if/else代码块
  • include -包含另外一个模版
  • raw-暂时停用标签处理以避免出现语法冲突
  • unless-if的反义词

Comments

注释是最简单的标签,它会隐藏标记的内容。例如:

We made 1 million dollars {% comment %} in losses {% endcomment %} this year.

Raw

Raw暂时禁用标签处理。这是用于生成内容,它使用相互矛盾的语法非常有用。例如:

  1. {% raw %}
  2. In Handlebars, {{ this }} will be HTML-escaped, but {{{ that }}} will not.
  3. {% endraw %}

If / Else

if / else语句对任何其他编程语言都应该是众所周知的。Liquid允许使用if,unless,以及可选的elsifelse,例如:

  1. {% if user %}
  2. Hello {{ user.name }}
  3. {% endif %}
  1. # Same as above
  2. {% if user != null %}
  3. Hello {{ user.name }}
  4. {% endif %}
  1. {% if user.name == 'tobi' %}
  2. Hello tobi
  3. {% elsif user.name == 'bob' %}
  4. Hello bob
  5. {% endif %}
  1. {% if user.name == 'tobi' or user.name == 'bob' %}
  2. Hello tobi or bob
  3. {% endif %}
  1. {% if user.name == 'bob' and user.age > 45 %}
  2. Hello old bob
  3. {% endif %}
  1. {% if user.name != 'tobi' %}
  2. Hello non-tobi
  3. {% endif %}
  1. # Same as above
  2. {% unless user.name == 'tobi' %}
  3. Hello non-tobi
  4. {% endunless %}
  1. # Check for the size of an array
  2. {% if user.payments == empty %}
  3. you never paid !
  4. {% endif %}
  5.  
  6. {% if user.payments.size > 0 %}
  7. you paid !
  8. {% endif %}
  1. {% if user.age > 18 %}
  2. Login here
  3. {% else %}
  4. Sorry, you are too young
  5. {% endif %}
  1. # array = 1,2,3
  2. {% if array contains 2 %}
  3. array includes 2
  4. {% endif %}
  1. # string = 'hello world'
  2. {% if string contains 'hello' %}
  3. string includes 'hello'
  4. {% endif %}

 Case Statement

如果您需要更多的条件,您可以使用case语句:

  1. {% case condition %}
  2. {% when 1 %}
  3. hit 1
  4. {% when 2 or 3 %}
  5. hit 2 or 3
  6. {% else %}
  7. ... else ...
  8. {% endcase %}

例如:

  1. {% case template %}
  2. {% when 'label' %}
  3. // {{ label.title }}
  4. {% when 'product' %}
  5. // {{ product.vendor | link_to_vendor }} / {{ product.title }}
  6. {% else %}
  7. // {{page_title}}
  8. {% endcase %}

Cycle

通常你有不同的颜色或类似的任务之间切换。 Liquid已经内置了对此类操作的支持,使用cycle标记。

  1. {% cycle 'one', 'two', 'three' %}
  2. {% cycle 'one', 'two', 'three' %}
  3. {% cycle 'one', 'two', 'three' %}
  4. {% cycle 'one', 'two', 'three' %}

结果为:

  1. one
  2. two
  3. three
  4. one

如果未提供循环体的名称,那么它假设用同样的参数多次调用同一个循环体。

如果你想完全控制循环体,您可以选择指定循环体的名称。这甚至可以是一个变量。

  1. {% cycle 'group 1': 'one', 'two', 'three' %}
  2. {% cycle 'group 1': 'one', 'two', 'three' %}
  3. {% cycle 'group 2': 'one', 'two', 'three' %}
  4. {% cycle 'group 2': 'one', 'two', 'three' %}

得到结果为:

  1. one
  2. two
  3. one
  4. two

For loops

Liquid 可以使用for遍历集合。

  1. {% for item in array %}
  2. {{ item }}
  3. {% endfor %}

当遍历一个键值对集合时,item[0]是key的值,item[1]则是value的值。

  1. {% for item in hash %}
  2. {{ item[0] }}: {{ item[1] }}
  3. {% endfor %}

在每次for循环中,下面的辅助变量可用于额外的需求:

- 1.forloop.length # => for的循环总次数
- 2.forloop.index # => 当前循环的index,从1开始
- 3.forloop.index0 # => 当前循环的index,从0开始
- 4.forloop.rindex # => 当前循环剩余次数
- 5.forloop.rindex0 # => 当前循环剩余次数,从0开始
- 6.forloop.first # => 是否是循环的第一次
- 7.forloop.last #=> 是否是循环的最后一次

你还可以使用多个属性来过滤循环中的内容。

limit:int可以限制你有多少个项目获得 offset:int可以让你从第n项开始遍历。

  1. # array = [1,2,3,4,5,6]
  2. {% for item in array limit:2 offset:2 %}
  3. {{ item }}
  4. {% endfor %}
  5. # results in 3,4

倒序循环

  1. {% for item in collection reversed %}
  2. {{item}}
  3. {% endfor %}

你可以通过定义一系列的数字来代替现有的集合循环。范围可以通过包括文本和变量的数字来定义:

  1. # ...
  2. {% ..item.quantity) %}
  3. {{ i }}
  4. {% endfor %}
  5. # results ,,,

Variable Assignment

您可以将数据存储在自己的变量,在输出或其他标记随意使用。创建一个变量最简单的方法是使用assign标签,它有一个非常简单的语法:

  1. {% assign name = 'freestyle' %}
  2.  
  3. {% for t in collections.tags %}
  4. {% if t == name %}
  5. Freestyle!
  6. {% endif %}
  7. {% endfor %}

这样做的另一种方法是将分配true / false值的变量:

  1. {% assign freestyle = false %}
  2.  
  3. {% for t in collections.tags %}
  4. {% if t == 'freestyle' %}
  5. {% assign freestyle = true %}
  6. {% endif %}
  7. {% endfor %}
  8.  
  9. {% if freestyle %}
  10. Freestyle!
  11. {% endif %}
  1. 如果你想将多个字符串合并成一个单一的字符串,并将其保存到变量中,你可以使用capture标记。这个标签“捕获”内容无论它是否已经实现,然后分配捕获的值。而不是只能捕获屏幕上已经存在的内容。
  1. {% capture attribute_name %}{{ item.title | handleize }}-{{ i }}-color{% endcapture %}
  2. <label for="{{ attribute_name }}">Color:</label>
  3. <select id="{{ attribute_name }}" name="attributes[{{ attribute_name }}]">
  4. <option value="red">Red</option>
  5. <option value="green">Green</option>
  6. <option value="blue">Blue</option>
  7. </select>

 

摘自:
https://www.bbsmax.com/A/GBJrna7qJ0/

参考:

Liquid语法
https://www.jianshu.com/p/4224b8ea0ec0
Liquid
https://liquid.bootcss.com/basics/introduction/
开源模板语言Liquid
https://blog.csdn.net/Bi_ZhiAn/article/details/72547958

.

 

发表在 templete | Liquid基础语法已关闭评论

Geoserver发布离线瓦片卫星图TIF格式

摘录自: https://blog.csdn.net/qq_40482342/article/details/101770603

 

看了诸多关于geoserver发布离线瓦片的博客,发现别人的瓦片下载方式和工具跟我的不太相同,而且对与新人来说有点难以看明白,鄙人就写这样的一篇博客,给大家提供下我的用geoserver发布离线的瓦片图
本人自己的方法不足之处还望指出
我在这里发布的是通过全能地图下载器下载的瓦片地图CSDN下载:https://download.csdn.net/download/qq_40482342/11830501(百度网盘:链接: https://pan.baidu.com/s/1PNNYr7HhGaGlRCJmZis3pg 提取码: k546 ),由于geoserver不能直接将瓦片图发布进去当然还有别的办法可以,这里只讲这种稍微简单的发布方式***,然后通过全能地图拼接的tif格式的图发布到geoserver上这里下载和拼接消耗的时间比较久*然后将下载好的tif的图通过geoserver发布,注意这里的tif图是对应的不同级别的图,要按级别发布。最后再将不同图层的切片文件拷到一个图层中.
详细教程如下
下载全能地图下载器 ,然后选择要下载的地图级别,下载完成点击 “是” 拼接成tif格式的地图

--

--

创建一个工作区,用来存储项目图层,命名随意

添加数据存储,选择发布tif格式,将自己下载好的tif地图上传

命名随意,但自己要知道发布的tif是哪个图层的
随后就会弹出新建图层界面,点击发布即可

下面就是跟平常发布图层一样的添加,只不过值得注意的是自己的投影坐标要和自己下载的坐标系要想对应,不然的话,图层级别可能会不太匹配,导致自己发布的地图模糊;

选择Tile Caching 设置自己对应的图层级别,注意坐标系要相同

如果坐标系不同,请在 add grid subost 选择对应的坐标在添加,如果 add grid subost 中没有,请在Gridsets中添加对应的坐标投影

最后发布,之后将自己下载的全部tif的地图像这样发布发布完成后进行如下操作:
点击Tile Layers 找到之前发布的图层 点击seed/Truncate

之后会弹出如下界面:
注意这里的投影坐标和层级要对应发布图层的等级
然后提交生成缓存

最后在 geoserver的data_dir\gwc文件夹中找到对应的地图缓存,把它们复制到一个文件夹
,可以是1级图层的文件夹中, 我这里只发布了 8到13级 所有我将所有的地图缓存,把它们复制到8级文件夹中了

然后修改8级图层的Tile Caching中的发布级别 根据自己发布的图层级别 调节最大值和最小值 我这里是8到13级

最后 如下就能查看不同级别的瓦片图了

————————————————
版权声明:本文为CSDN博主「RNG_Never give up」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_40482342/article/details/101770603

发表在 info | Geoserver发布离线瓦片卫星图TIF格式已关闭评论

2019 冠状病毒口罩参考标准

防病毒口罩适用范围:

注:信息收集于网络,供个人参考,不代表信息的绝对准确及应用标准。

N/R/P后面加上数字表示过滤效率,是美国的标准编号。美国标准(NIOSH)与欧洲标准(EN)的对照如下:

===========================================

N95、KN95、KP95、3M、医用口罩

三个不同标准:

1.  医用防护口罩:符合中国GB 19083-2010 强制性标准,过滤效率≥95%(使用非油性颗粒物测试)。要求通过合成血液穿透测试(防止体液喷溅),要求符合微生物指标。
2.   N95口罩:美国NIOSH认证,非油性颗粒物过滤效率≥95%。
3.    KN95口罩:符合中国GB 2626 强制性标准,非油性颗粒物过滤效率≥95%。

以上三种级别口罩的过滤效率的测试方法一模一样!所以过滤效率级别一致。
所以,大家买NIOSH N95和GB2626-2006 KN95的口罩是一样的。佩戴口罩的关键在于和面部的密合,就是不漏气!

“3M口罩”指所有3M公司生产的口罩产品。

那么N95的95代表啥呢?

“95”、“99”和“100”是指用0.3微米颗粒进行测试时的过滤效率水平。“95”表示过滤效率在 95%以上,“99”表示过滤效率在99%以上,“100”表示过滤效率在99.7%以上。
“N”表示不耐油(not resistant to oil),适合非油性颗粒物,无使用时间的限制。
“R”表示耐油(resistant to oil),适合油性或非油性颗粒物,若用于油性颗粒物的防护,使用时间不超过8小时。
“P”表示防油(oil proof),适合油性或非油性颗粒物,若用于油性颗粒物,使用时间应遵循制造商的建议。

所以并不是说只能买N95一种,滤过率≥95%的都行,那么NIOSH认证的其他防颗粒物口罩级别还包括:
N95、N99、N100、R95、R99、R100、P95、P99、P100,共9种

这些防护级别都能够覆盖N95的防护范围。

医用口罩分级参考一下标准

有呼吸阀没有效果?

N95分为有无呼气阀两种。呼吸困难症状的人,使用N95呼吸器可能会使佩戴者呼吸更加困难,使用配有呼气阀的N95口罩,能让他们呼气轻松一些。但有呼气阀的N95可以保护佩戴者,但不保护周围的人。如果您是病毒携带者,请选用没有呼气阀的N95, 不要把病毒传染开。

总结对比:

防护能力:医用防护口罩>N95口罩 ≈ KN95 口罩 > N90口罩>医用外科口罩>普通口罩
佩戴舒适度:普通口罩 ≈ 医用外科口罩 > KN95口罩≈N95口罩≈医用防护口罩

对于KN95口罩更换频率问题:脏了破了就换,三五天不等,或者医护人员去污染区了就换。

发表在 info | 2019 冠状病毒口罩参考标准已关闭评论

visual studio 编译常用变量

 

 

$(BaseOutputPath) 默认值 bin\。

$(PlatformName) 默认值是 $(Platform),而 $(Platform) 的默认值是 AnyCPU;
当这个值等于 AnyCPU 的时候,这个值就不会出现在路径中。

$(Configuration) 默认值是 Debug。

$(RuntimeIdentifier) 这个值和 $(PlatformTarget) 互为默认值,任何一个先设置都会影响另一个;此值即 x86、x64 等标识符。
可以通过 $(AppendRuntimeIdentifierToOutputPath) 属性指定是否将此加入到输出路径中。

$(TargetFramework) 这是在 csproj 文件中强制要求指定的,如果不设置的话项目是无法编译的;
可以通过 $(AppendTargetFrameworkToOutputPath) 属性指定是否将此加入到输出路径中。

 

 

 

 

 

 

发表在 C# Code | visual studio 编译常用变量已关闭评论

Java 三层架构(命名规则)(转贴)

简单介绍经典三层架构

表示层(web层)、业务逻辑层(service层)、数据访问层(dao层),用一张图来描述这其中的关系

现在只学习Servlet,Jsp,所以在表示层中就放的是Servlet和Jsp了,如果学了3大框架,Struts、Hibernate、Spring、会发现Struts是处理表示层的一个框架,而Hibernate是在dao层的一个框架,spring就是service层了。

经典三层架构和MVC的关系

他们是两个毫无相关的东西,经典三层架构是一种分层思想,将开发模式分为了这三层,每个人根据自己的专长,开发不同的模块,比如,前端工程师,那么就专研表示层即可,想办法如何让页面变的更好看,如何吸引别人,而有些专门做数据库工作的人,就可以只关注操作数据库的活,如何让查询更加快速有效,而不必关注数据该如何显示这种问题。这就是分层带来的巨大好处,而MVC是一种设计模式,目的是让HTML代码和业务逻辑代码分开,让代码看起来更加清晰,便于开发。硬说他们有关系的话,只能说他们有共同的点,分层,解耦。实际项目中的包命名结构,其也是按照三层架构思想来进行编写代码的,脑袋里要保持着这种思想进行开发。

命名规则(xxx:代表公司名称  yyy:代表项目名称)

com.xxx.yyy.dao      dao层接口
com.xxx.yyy.dao.impl    dao层实现
com.xxx.yyy.service    service层接口
com.xxx.yyy.service.impl  service层实现
com.xxx.yyy.web      web层
com.xxx.yyy.util      工具包
com.xxx.yyy.domain    javabean

转自:

https://www.cnblogs.com/weibanggang/p/9496837.html

 

 

 

发表在 java | Java 三层架构(命名规则)(转贴)已关闭评论

innodb_flush_log_at_trx_commit和sync_binlog参数

innodb_flush_log_at_trx_commit和sync_binlog是MySQL innodb引擎的两个重要的参数,其中innodb_flush_log_at_trx_commit是将事务日志从innodb log buffer写入到redo log中,sync_binlog是将二进制日志文件刷新到磁盘上。

innodb事务日志redo,binlog逻辑过程如下:
1.事务写入redo log buffer中;
2.将log buffer刷新到redo log中,不过会先写一个TX PREPARE标记;
3.写binlog
4.在redo log中写入TX COMMIT标记;
5.将写binlog成功的标记写入redo log。

参数解析如下:
innodb_flush_log_at_trx_commit = N:

N=0    每隔一秒,把事务日志缓存区的数据写到日志文件中,以及把日志文件的数据刷新到磁盘上;
log buffer 会 每秒写入到日志文件并刷写(flush)到磁盘。但每次事务提交不会有任何影响,也就是 log buffer 的刷写操作和事务提交操作没有关系。在这种情况下,MySQL性能最好,但如果 mysqld 进程崩溃,通常会导致最后 1s 的日志丢失。

N=1    每个事务提交时候,把事务日志从缓存区写到日志文件中,并且刷新日志文件的数据到磁盘上;
当取值为 1 时,每次事务提交时,log buffer 会被写入到日志文件并刷写到磁盘。这也是默认值。这是最安全的配置,但由于每次事务都需要进行磁盘I/O,所以也最慢。

N=2    每事务提交的时候,把事务日志数据从缓存区写到日志文件中;每隔一秒,刷新一次日志文件,但不一定刷新到磁盘上,而是取决于操作系统的调度;
当取值为 2 时,每次事务提交会写入日志文件,但并不会立即刷写到磁盘,日志文件会每秒刷写一次到磁盘。这时如果 mysqld 进程崩溃,由于日志已经写入到系统缓存,所以并不会丢失数据;在操作系统崩溃的情况下,通常会导致最后 1s 的日志丢失。
上面说到的「最后 1s」并不是绝对的,有的时候会丢失 更多数据。有时候由于调度的问题,每秒刷写(once-per-second flushing)并不能保证 100% 执行。对于一些数据一致性和完整性要求不高的应用,配置为 2 就足够了;如果为了最高性能,可以设置为 0。有些应用,如支付服务,对一致性和完整性要求很高,所以即使最慢,也最好设置为 1.
当我们设置为2 的时候,Log Thread 会在我们每次事务结束的时候将数据写入事务日志,但是这里的写入仅仅是调用了文件系统的文件写入操作。而我们的文件系统都是有缓存机制的,所以Log Thread 的这个写入并不能保证内容真的已经写入到物理磁盘上面完成持久化的动作。文件系统什么时候会将缓存中的这个数据同步到物理磁盘文件Log Thread 就完全不知道了。所以,当设置为2 的时候,MySQL Crash 并不会造成数据的丢失,但是OS Crash 或者是主机断电后可能丢失的数据量就完全控制在文件系统上了。各种文件系统对于自己缓存的刷新机制各不一样,大家可以自行参阅相关的手册。

sync_binlog =  N:

N>0    每向二进制日志文件写入N条SQL或N个事务后,则把二进制日志文件的数据刷新到磁盘上;
N=0    不主动刷新二进制日志文件的数据到磁盘上,而是由操作系统决定;

推荐配置组合:

N=1,1  — 适合数据安全性要求非常高,而且磁盘IO写能力足够支持业务,比如充值消费系统;
N=1,0  — 适合数据安全性要求高,磁盘IO写能力支持业务不富余,允许备库落后或无复制;
N=2,0或2,m(0<m<100)  — 适合数据安全性有要求,允许丢失一点事务日志,复制架构的延迟也能接受;
N=0,0  — 磁盘IO写能力有限,无复制或允许复制延迟稍微长点能接受,例如:日志性登记业务;
当两个参数设置为双1的时候,写入性能最差,sync_binlog=N (N>1 ) innodb_flush_log_at_trx_commit=2 时,(在当前模式下)MySQL的写操作才能达到最高性能。

数据安全性

当innodb_flush_log_at_trx_commit和sync_binlog  都为1时是最安全的,在mysqld 服务崩溃或者服务器主机crash的情况下,binary log 只有可能丢失最多一个语句或者一个事务。但是鱼与熊掌不可兼得,都为1会导致频繁的IO操作,因此该模式也是最慢的一种方式。
当innodb_flush_log_at_trx_commit设置为0,mysqld进程的崩溃会导致上一秒钟所有事务数据的丢失。
当innodb_flush_log_at_trx_commit设置为2,只有在操作系统崩溃或者系统掉电的情况下,上一秒钟所有事务数据才可能丢失。

双1适合数据安全性要求非常高,而且磁盘IO写能力足够支持业务,比如订单,交易,充值,支付消费系统。双1模式下,当磁盘IO无法满足业务需求时,推荐的做法是innodb_flush_log_at_trx_commit=2 ,sync_binlog=N (N为500 或1000) 且使用带蓄电池后备电源的缓存cache,防止系统断电异常。

---------------------

作者:thundermeng
来源:CSDN
原文:https://blog.csdn.net/thundermeng/article/details/50448614
版权声明:本文为博主原创文章,转载请附上博文链接!

 

-----------------------------------------------

innodb_flush_log_at_trx_commit

该参数控制重做日志写入磁盘的过程。我们知道 InnoDB 使用“Write Ahead Log”策略来避免数据丢失问题,即依靠重做日志来保证数据能在丢失后进行恢复。因此,InnoDB 重做日志的持久化非常重要。

该参数的有效值有 012

  • 0: 事务提交时,不将重做日志缓冲写入磁盘,而是依靠 InnoDB 的主线程每秒执行一次刷新到磁盘。因此如果 MySQL 发生宕机,那么就有可能丢失一部分事务。
  • 1: 事务提交时,会将重做日志缓冲写入磁盘,并且立即刷新(fsync())。注意,因为操作系统的“延迟写”特性,此时的刷入只是写到了操作系统的缓冲区中,因此执行同步操作才能保证一定持久化到了硬盘中。
  • 2: 事务提交时,会将重做日志缓冲写入磁盘,但是不会立即进行刷新操作,因此只是写到了操作系统的缓冲区。此时若操作系统发生宕机而没有即使的同步,也可能会丢失一部分数据。

影响

  • 当设置为0,该模式速度最快,但不太安全,mysqld进程的崩溃会导致上一秒钟所有事务数据的丢失。
  • 当设置为1,该模式是最安全的,但也是最慢的一种方式。在mysqld 服务崩溃或者服务器主机crash的情况下,binary log 只有可能丢失最多一个语句或者一个事务。。
  • 当设置为2,该模式速度较快,也比0安全,只有在操作系统崩溃或者系统断电的情况下,上一秒钟所有事务数据才可能丢失。

sync_binlog

该参数控制着二进制日志写入磁盘的过程。

该参数的有效值为01N

  • 0:默认值。事务提交后,将二进制日志从缓冲写入磁盘,但是不进行刷新操作(fsync()),此时只是写入了操作系统缓冲,若操作系统宕机则会丢失部分二进制日志。
  • 1:事务提交后,将二进制文件写入磁盘并立即执行刷新操作,相当于是同步写入磁盘,不经过操作系统的缓存。
  • N:每写N次操作系统缓冲就执行一次刷新操作。

作者:风亡小窝
链接:https://www.jianshu.com/p/a767b2665eda
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

发表在 db | innodb_flush_log_at_trx_commit和sync_binlog参数已关闭评论

Test & Tool URL

HTML5 HTML Media Capture

https://www.aooshi.org/test/html-media-capture.html

Chars Generator

https://www.aooshi.org/tools/charsgenerator

Hex To ASCII Converter

https://www.aooshi.org/tools/hex2ascii

UUID Generator

https://www.aooshi.org/tools/uuidgenerator

IP Test

https://www.aooshi.org/tools/ip

MD5 Converter

https://www.aooshi.org/tools/md5parser

 

 

 

 

.

发表在 article | Test & Tool URL已关闭评论

org.aooshi.j 本地化依赖方法

服务依赖本地引用方法文档

For java

 

库列表

aooshi-j-util 基础工具库
aooshi-j-numberserver-client 数值服务客户端

 

源码库地址

aooshi-j-util https://github.com/aooshi/aooshi-j-util
aooshi-j-numberserver-client https://github.com/aooshi/aooshi-j-numberserver-client

 

本地项目步骤

  1. 创建本地主目录 {you work directory}/org.aooshi.j
  2. 克隆 aooshi-j-util 至 本地目录中,例:/{you work directory}/org.aooshi.j/aooshi-j-util
  3. 克隆aooshi-j-numberserver-client 至 本地目录中,例:/{you work directory}/org.aooshi.j/ aooshi-j-numberserver-client
  4. 若需要其它,则按上述例子,克隆更多项目
  5. idea 导入项止,选择{you work directory}/org.aooshi.j 主目录(非某一项止),在选项页中钩选“Search for projects recursively” 选择,即搜索子项目
  6. 选中全部项目,一次性导入所有子项
  7. 通过 maven 工具,对每一个字段进行 install 安装
  8. 结束

 

项目引用

  1. xml
  2. 对需要的项目名称进行引用,如 aooshi-j-util

<dependency>
<groupId>org.aooshi.j</groupId>
<artifactId>aooshi-j-util</artifactId>
<version>1.0.0</version>
</dependency>

<dependency>
<groupId>org.aooshi.j</groupId>
<artifactId> aooshi-j-numberserver-client </artifactId>
<version>1.0.0</version>
</dependency>

 

使用方式一: 实例化方式

NumberServerClient numberServerClient = new NumberServerClient();
numberServerClient.setApiPass("");
numberServerClient.setApiUser("");
numberServerClient.setApiUrl("");
numberServerClient.get("topic");

 

使用方式一: 注解方式


创建一个本地类,并继承
@Component
public class NumberUtil extends NumberServerClient{   }

使用
@Autowired
private NumberUtil numberUtil;

 

项目配置

格式application.properties
NumberServer.ApiUrl=http://192.168.199.85:8021/
NumberServer.ApiUser=1
NumberServer.ApiPass=4pzPwZ45ajMMbhQpmwPJsZZc757SHHpG 

格式application.yml
NumberServer:
ApiUrl: http://192.168.199.85:8021/
ApiUser: 1
ApiPass: 4pzPwZ45ajMMbhQpmwPJsZZc757SHHpG

配置中的地址,用户,密码 均为你的应用所分配的配置

 

 

 

发表在 java | org.aooshi.j 本地化依赖方法已关闭评论