分类目录归档:心情

Oracle jdbc 连接,特别慢的问题。

遇到一个奇怪的问题,第一次连接 oracle 的时候,很快,第二次开始,就非常慢了,而且,过段时间就快,很随机。

跟踪 stacktrace 发现,每次 oracle logon 的时候,会使用 /dev/random 来生成随机数,在 centos 下,这个 device 很慢。所以考虑换成伪随机数 /dev/urandom。

可以使用 sudo rngd -b -o /dev/random -r /dev/urandom 替换掉。

也可以配置 java
1. 修改 $JAVA_HOME/jre/lib/security/java.security,将 securerandom.source=file:/dev/random 修改为 securerandom.source=file:/dev/urandom
2. 设置 -Djava.security.egd=file:/dev/urandom 或 -Djava.security.egd=file:/dev/./urandom

mysql sql_mode

mysql innodb 的 index 有一定的长度要求,所以创建 index 的时候,经常会有发生超长的错误,但这个错误也是和 mysql 的 sql mode 有关系的,比如,把 sql_mode 设置成 ONLY_FULL_GROUP_BY,那么 index 会创建成功,但长度被截取 7xx 位,而不是像平时那样,直接报错。

sql_mode常用值
ONLY_FULL_GROUP_BY:
对于GROUP BY聚合操作,如果在SELECT中的列,没有在GROUP BY中出现,那么这个SQL是不合法的,因为列不在GROUP BY从句中

NO_AUTO_VALUE_ON_ZERO:
该值影响自增长列的插入。默认设置下,插入0或NULL代表生成下一个自增长值。如果用户 希望插入的值为0,而该列又是自增长的,那么这个选项就有用了。

STRICT_TRANS_TABLES:
在该模式下,如果一个值不能插入到一个事务表中,则中断当前的操作,对非事务表不做限制

NO_ZERO_IN_DATE:
在严格模式下,不允许日期和月份为零

NO_ZERO_DATE:
设置该值,mysql数据库不允许插入零日期,插入零日期会抛出错误而不是警告。

ERROR_FOR_DIVISION_BY_ZERO:
在INSERT或UPDATE过程中,如果数据被零除,则产生错误而非警告。如 果未给出该模式,那么数据被零除时MySQL返回NULL

NO_AUTO_CREATE_USER:
禁止GRANT创建密码为空的用户

NO_ENGINE_SUBSTITUTION:
如果需要的存储引擎被禁用或未编译,那么抛出错误。不设置此值时,用默认的存储引擎替代,并抛出一个异常

PIPES_AS_CONCAT:
将”||”视为字符串的连接操作符而非或运算符,这和Oracle数据库是一样的,也和字符串的拼接函数Concat相类似
ANSI_QUOTES:
启用ANSI_QUOTES后,不能用双引号来引用字符串,因为它被解释为识别符

ORACLE的sql_mode设置等同:PIPES_AS_CONCAT, ANSI_QUOTES, IGNORE_SPACE, NO_KEY_OPTIONS, NO_TABLE_OPTIONS, NO_FIELD_OPTIONS, NO_AUTO_CREATE_USER.

Kafka 基本的使用和生产环境集群配置,包括 0.10 的 Java API 使用

最近用 Kafka 和外部系统进行数据交换,性能还是比较喜人的,问题也遇到一些。

Kafka 是什么网上有很多文章介绍,就不重复了。Kafka 是用 Scala 编写的,经过尝试 Kafka 的性能令人满意,但到现在,我还是有一些疑问的。
在某些场景下,我希望单条记录 commit,感觉就有些不适合了。
Topic 的历史的数据在什么情况下会删除,也不太清楚。

这次遇到了几个问题。

1. Java API 的使用,Kafka Doc 上关于 Java API 的使用一笔带过,没想到具体的使用方法文档,在 Kafka 的 Java Doc 上面,直接看就行了。
2. listeners 一定要写上 host 或 ip,否则本地用得挺好,远程的 producer 和 consumer 就不能用了。
3. 关于 zookeeper 的,最好用 Kafka 自己带的版本,比如带的是 3.4.6,用 3.4.8 的,Kafka 都连不上。

用的时候,务必先创建好 Topic,比如设置好的 partitions 和 replication-factor,一旦连上又有不停的消息进入,就没办法改了,只能停掉 producer 和 consumer 才能改。

iOS 不越狱,4G 下如何使用代理

相信很多人都有在 4G 下使用代理翻墙的需求,但郁闷的是,iOS 在 4G 下面是无法设置代理的,这就让很多类似 Suger 的应用火起来了,比如小火箭 Shadowrocket,能够在本地创建一个 vpn 并通过 ss 连到外面去。

其实 4G 下,是有办法设置代理的。设置的方法就是 iOS 的 profile,中文叫做描述文件。
这个描述文件其实是个 xml,也就是说,完全可以手写的。要按照下面那个文档

https://developer.apple.com/library/ios/featuredarticles/iPhoneConfigurationProfileRef/Introduction/Introduction.html

不过手写也太累了吧,有 Mac 的同学,可以去 Mac App Store 安装一个 Apple Configurator 2,可以可视化编辑,并保存成 mobileconfig 文件。打开 iOS 的 Safari 访问这个文件,就可以安装 profile 了。

mobileconfig

如上图,蜂窝移动网络,就是配置 4G 下的代理了。但是,在这里无法配置 pac 的,如果想用 pac,那就麻烦了,需要用全局 http 代理配置,但是那个配置是需要你的 iOS 在“已监督”状态下的,相当于可控状态。一台普通的手机想变成“已监督”状态,要清空数据重新刷机的,所以就不搞了。

这个文件可以使用 openssl 再签名一下,因为都是自己使用,这个步骤就没有用过了。