分类 软件 下的文章

首先通过rev-list来找到仓库记录中的大文件:

git rev-list --objects --all | grep "$(git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -5 | awk '{print$1}')"

然后通过 filter-branch 来重写这些大文件涉及到的所有提交(重写历史记录):

git filter-branch -f --prune-empty --index-filter 'git rm -rf --cached --ignore-unmatch your-file-name' --tag-name-filter cat -- --all

https://harttle.land/2016/03/22/purge-large-files-in-gitrepo.html

生产环境请考虑使用 bfg 等效率工具

Linux系统,在服务器端的大多数常用软件都有足够多的使用者,所以就足够稳定,由于它在服务器端市场占有率远高于微软,所以服务器端就是比微软稳定,很正常的事。在桌面端,市场占用率远低于微软,不稳定也是自然的。为什么Linux下命令行程序往往又好用又稳定?是因为用户喜欢装逼吗?不是,因为命令行程序是服务器端跟桌面端通用的,而服务器端程序经过了足够多用户的使用,经过了足够的反馈开发迭代,所以稳定。而图形界面只有桌面用户用,桌面占有率那么低,这些程序往往缺乏足够的测试人力也缺乏足够的开发维护人力,所以并不会非常稳定。那么,你要想体验Linux稳定,怎么办?答案就是只使用市场占有率高,用户量大,因而获得了充分测试的软件,这就稳定了。比方说只使用服务器端。或者桌面端只使用最常用的那些,例如终端仿真器,浏览器,输入法,gcc编译器之类,肯定是稳定的。你看我就用浏览器,输入法,xterm,screen,编程ide,vim,以及一堆命令行的东西,稳定得很啊,六个月才重启一次电脑,重启的那一次还是因为ubuntu升级。

作者:pansz
链接:https://www.zhihu.com/question/301581684/answer/547761587
来源:知乎 著作权归作者所有。

npm-check 是用来检查 npm 依赖包是否有更新,错误以及不在使用的,我们也可以使用 npm-check 进行包的更新。

安装npm-check:

npm install -g npm-check

检查npm包的状态:

npm-check -u -g

通过上下键可以移动光标,使用空格键可以选择需要处理的包,回车直接进行处理。选择 [email protected] 包升级到 3.10.3:

? Choose which packages to update. [email protected]

$ npm install --global [email protected] --color=always

/usr/local/bin/npm -> /usr/local/lib/node_modules/npm/bin/npm-cli.js
/usr/local/lib
└─┬ [email protected]
  ├── [email protected]
  ├── [email protected]
  └── [email protected]

[npm-check] Update complete!
[npm-check] [email protected]
[npm-check] You should re-run your tests to make sure everything works with the updates.

npm outdated 可查看那些包比较旧

explain sql语句 可以用来分析索引的一些情况:

idselect_typetabletypepossiable_keyskeykey_lenref

TYPE

显示子查询使用何种类型的查询

从最好到最差依次是:system > const > eq_ref > ref > rang > index > ALL

一般的优化需要达到 `rang` 级别,最好是 `ref` 级别

system

单个表中的一行记录,const 类型的特例,查询速度最快

const

通过索引一次就能找到,通常是查询主键查询或者唯一查询 (primay_key , unique)

eq_ref

唯一索引扫描,用索引查询出了一条记录 select * from users where phone = ''

ref

非唯一索引表,用到了索引查出了多条记录 select * from users where age = 18

- 阅读剩余部分 -

docker run -d -p 80:80 php:7.3-fpm
docker exec -it 775c7c9ee1e1 /bin/bash

docker cp mycontainer:/opt/testnew/file.txt /opt/test/

docker build -t libzz/api:v1 .

清理容器

docker container prune

进入已停止的容器

docker run -ai container_id

编辑自动扩容策略

kubectl edit hpa

kubectl patch deployments/rollcall-api --patch '{"spec": {"template": {"metadata": {"annotations": {"version/config": "$(date +%s)" }}}}}'

展示 Deployment 相关信息:

kubectl describe deployment rollcall-api

Mac 自带 php-fpm,在终端执行 php-fpm,会报如下错误:

ERROR: failed to open configuration file '/private/etc/php-fpm.conf': No such file or directory (2)
ERROR: failed to load configuration file '/private/etc/php-fpm.conf'
ERROR: FPM initialization failed

错误信息显示,不能打开配置文件,cd /private/etc,发现没有 php-fpm.conf 文件,但是有 php-fpm.conf.default 文件。这个文件是默认配置,我们可以复制一份,改名为 php-fpm.conf,然后再根据需要改动配置。

sudo cp /etc/php-fpm.d/www.conf.default /etc/php-fpm.d/www.conf
sudo cp /etc/php-fpm.conf.default /etc/php-fpm.conf
sudo cp /etc/php.ini.default /etc/php.ini

执行 php-fpm,再次报错:

ERROR: failed to open error_log (/usr/var/log/php-fpm.log): No such file or directory (2)
ERROR: failed to post process the configuration
ERROR: FPM initialization failed

错误信息显示,不能打开错误日志文件。cd /usr/var/log 发现根本没有这个目录,甚至连 var 目录都没有,加上为了避免权限问题,干脆配置到 /usr/local/var/log 目录。首先手动建立这些目录

mkdir /usr/local/var/log
mkdir /usr/local/var/run

然后修改 php-fpm.conf 以下内容:

error_log = /usr/local/var/log/php-fpm.log
pid = /usr/local/var/run/php-fpm.pid

执行 php-fpm,再次报错:

NOTICE: [pool www] 'user' directive is ignored when FPM is not running as root
NOTICE: [pool www] 'group' directive is ignored when FPM is not running as root

于是 sudo php-fpm,再次报错:

ERROR: unable to bind listening socket for address '127.0.0.1:9000': Address already in use (48)
ERROR: FPM initialization failed

sudo killall php-fpm

然后通过运行 php-fpm 命令即可正常启动 php-fpm

最后为了方便启动管理,我们给 php-fpm 启动、关闭、重启建个别名,方便以后操作

vim ~/.bash_profile

alias php-start="sudo php-fpm"
alias php-stop="kill -INT `cat /usr/local/var/run/php-fpm.pid`"
alias php-restart="kill -USR2 `cat /usr/local/var/run/php-fpm.pid`"

与关系型数据库相比,MongoDB的优点:

1. 弱一致性(最终一致),保证用户的访问速度:

举例来说,在传统的关系型数据库中,一个 COUNT 类型的操作会锁定数据集,这样可以保证得到“当前”情况下的精确值。

这在某些情况下,例如:通过 ATM 查看账户信息的时候很重要,但对于 Wordnik 来说,数据是不断更新和增长的,这种精确的保证几乎没有任何意义,反而会产生很大的延迟。他们需要的是一个大约的数字以及更快的处理速度。

但某些情况下 MongoDB 会锁住数据库。如果此时正有数百个请求,则它们会堆积起来,造成许多问题。我们使用了下面的优化方式来避免锁定:

2. 每次更新前,我们会先查询记录。

查询操作会将对象放入内存,于是更新则会尽可能的迅速。在主/从部署方案中,从节点可以使用“-pretouch”参数运行,这也可以得到相同的效果。

使用多个 mongod 进程。我们根据访问模式将数据库拆分成多个进程。

文档结构的存储方式,能够更便捷的获取数据。

对于一个层级式的数据结构来说,如果要将这样的数据使用扁平式的,表状的结构来保存数据,这无论是在查询还是获取数据时都十分困难。

举例1:

就拿一个“字典项”来说,虽然并不十分复杂,但还是会关系到“定义”、“词性”、“发音”或是“引用”等内容。大部分工程师会将这种模型使用关系型数据库
中的主键和外键表现出来,但把它看作一个“文档”而不是“一系列有关系的表”岂不更好?使用
“dictionary.definition.partOfSpeech='noun'”来查询也比表之间一系列复杂(往往代价也很高)的连接查询方便
且快速。

举例2:

在一个关系型数据库中,一篇博客(包含文章内容、评论、评论的投票)会被打散在多张数据表中。在 MongoDB 中,能用一个文档来表示一篇博客,
评论与投票作为文档数组,放在正文主文档中。这样数据更易于管理,消除了传统关系型数据库中影响性能和水平扩展性的“JOIN”操作。

db.blogposts.save({
  title : "My First Post", author: {name : "Jane", id :1},
  comments : [
    { by: "Abe", text: "First" },
    { by : "Ada", text : "Good post" }
  ]
})
db.blogposts.find({ "author.name" : "Jane" })
db.blogposts.findOne({
  title : "My First Post",
  "author.name": "Jane",
  comments : [
    { by: "Abe", text: "First" },
    { by : "Ada", text : "Good post" }
  ]
})
db.blogposts.find({ "comments.by" : "Ada" })
db.blogposts.ensureIndex({ "comments.by" : 1 });

举例3:

MongoDB 是一个面向文档的数据库,目前由 10gen 开发并维护,它的功能丰富,齐全,完全可以替代 MySQL。在使用 MongoDB 做产品原型的过程中,我们总结了 MonogDB 的一些亮点:

1、使用 JSON 风格语法,易于掌握和理解

MongoDB 使用 JSON 的变种 BSON 作为内部存储的格式和语法。针对 MongoDB 的操作都使用 JSON 风格语法,客户端提交或接收的数据都使用 JSON 形式来展现。相对于 SQL 来说,更加直观,容易理解和掌握。

2、Schema-less,支持嵌入子文档:MongoDB 是一个 Schema-free 的文档数据库。

一个数据库可以有多个 Collection,每个 Collection 是 Documents 的集合。Collection 和 Document 和传统数据库的 Table 和 Row 并不对等。无需事先定义 Collection,随时可以创建。

3、Collection 中可以包含具有不同 schema 的文档记录。

这意味着,你上一条记录中的文档有3个属性,而下一条记录的文档可以有10个属性,属性的类型既可以是基本的数据类型(如数字、字符串、日期等),也可以是数组或者散列,甚至还可以是一个子文档(embed document)。这样,可以实现逆规范化(denormalizing)的数据模型,提高查询的速度。

4、内置 GridFS,支持大容量的存储。

GridFS 是一个出色的分布式文件系统,可以支持海量的数据存储。内置了 GridFS 的 MongoDB,能够满足对大数据集的快速范围查询。

5、内置Sharding。

提供基于Range的Auto Sharding机制:一个collection可按照记录的范围,分成若干个段,切分到不同的Shard上。Shards可以和复制结合,配合Replica sets能够实现Sharding+fail-over,不同的Shard之间可以负载均衡。

查询是对客户端是透明的。客户端执行查询,统计,MapReduce等操作,这些会被MongoDB自动路由到后端的数据节点。这让我们关注于自己的业务,适当的时候可以无痛的升级。

MongoDB 的 Sharding 设计能力最大可支持约 20 petabytes,足以支撑一般应用。这可以保证 MongoDB 运行在便宜的 PC 服务器集群上。PC 集群扩充起来非常方便并且成本很低,避免了“sharding”操作的复杂性和成本。

6、第三方支持丰富。(这是与其他的 NoSQL 相比,MongoDB 也具有的优势)

现在网络上的很多 NoSQL 开源数据库完全属于社区型的,没有官方支持,给使用者带来了很大的风险。而开源文档数据库 MongoDB 背后有商业公司 10gen 为其提供供商业培训和支持。而且MongoDB社区非常活跃,很多开发框架都迅速提供了对 MongDB 的支持。不少知名大公司和网站也在生产环境中使用MongoDB,越来越多的创新型企业转而使用 MongoDB 作为和 Django,RoR 来搭配的技术方案。

7、性能优越:
在使用场合下,千万级别的文档对象,近10G的数据,对有索引的 ID 的查询不会比 mysql 慢,而对非索引字段的查询,则是全面胜出。 mysql 实际无法胜任大数据量下任意字段的查询,而 mongodb 的查询性能实在让我惊讶。写入性能同样很令人满意,同样写入百万级别的数 据,mongodb 比我以前试用过的 couchdb 要快得多,基本10分钟以下可以解决。补上一句,观察过程中 mongodb 都远算不上是 CPU 杀手。

与关系型数据库相比,MongoDB 的缺点:

1、 mongodb 不支持事务操作。
所以事务要求严格的系统(如果银行系统)肯定不能用它。(这点和优点①是对应的)
2、 mongodb 占用空间过大。
关于其原因,在官方的FAQ中,提到有如下几个方面:

  • 空间的预分配:为避免形成过多的硬盘碎片,mongodb 每次空间不足时都会申请生成一大块的硬盘空间,而且申请的量从64M、128M、256M那 样的指数递增,直到 2G 为单个文件的最大体积。随着数据量的增加,你可以在其数据目录里看到这些整块生成容量不断递增的文件。
  • 字段名所占用的空间:为了保持每个记录内的结构信息用于查询,mongodb 需要把每个字段的key-value都以BSON的形式存储,如果 value 域相对于 key 域并不大,比如存放数值型的数据,则数据的 overhead 是最大的。一种减少空间占用的方法是把字段名尽量取短一些,这样占用空间就小了,但这就要求在易读性与空间占用上作为权衡了。我曾建议作者把字段名作个 index,每个字段名用一个字节表示,这样就不用担心字段名取多长 了。但作者的担忧也不无道理,这种索引方式需要每次查询得到结果后把索引值跟原值作一个替换,再发送到客户端,这个替换也是挺耗费时间的。现在的实现算是 拿空间来换取时间吧。
  • 删除记录不释放空间:这很容易理解,为避免记录删除后的数据的大规模挪动,原记录空间不删除,只标记“已删除”即可,以后还可以重复利用。
  • 可以定期运行 db.repairDatabase() 来整理记录,但这个过程会比较缓慢
  • MongoDB 没有如 MySQL 那样成熟的维护工具,这对于开发和IT运营都是个值得注意的地方。

作者:李天火
链接:https://www.jianshu.com/p/7a41907a1549
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

更新

官网下载现在是1.2.1版本,修复 UBUNTU 18.04 不能启动问题,大家赶紧更新吧!!

将当前用户加入 sudoer

sudo visudo -f /etc/sudoers.d/username

username 要替换为你系统用户名

并输入:

username ALL=(ALL:ALL) NOPASSWD:ALL

如果不习惯使用nano编辑器可以 更换为vim

使用 sudo 运行网易云音乐

编辑启动文件:

sudo gedit /usr/share/applications/netease-cloud-music.desktop

在第11行前加上 sudo

Exec=sudo netease-cloud-music %U

大功告成!点击图标即可启动!

系统版本:Ubuntu 18.04.1
软件版本:netease-cloud-music 1.1.0

Ubuntu:

sudo update-alternatives --config editor

There are 4 choices for the alternative editor (providing /usr/bin/editor).

  Selection    Path                Priority   Status
------------------------------------------------------------
* 0            /bin/nano            40        auto mode
  1            /bin/ed             -100       manual mode
  2            /bin/nano            40        manual mode
  3            /usr/bin/vim.basic   30        manual mode
  4            /usr/bin/vim.tiny    10        manual mode

Press <enter> to keep the current choice[*], or type selection number:

Non-interactive solution for setting vim as default editor:

sudo update-alternatives --set editor /usr/bin/vim.basic

CentOS:

On CentOS, you can change this value by adding the following line to your ~/.bashrc:

$ export EDITOR=`which name_of_editor`

Source the file to implement the changes:

$ source ~/.bashrc

sudo update-alternatives --set editor /usr/bin/vim.basic