写在前面 测试环境测试新功能的时候发现一个问题,es搜索的模糊搜索使用部分字段搜索不到指定的记录,如使用条件”2_“搜索不出来”2_test“的记录出来
正文 观察代码发现使用的是match_phrase,搜索语句如下:
12345678910111213141516171819202122232425262728{ "query": { "bool": { "must": [ { "term": { "deleted": { ...
写在前面 hbase的Rowkey根据不同业务需求可能设计成各式各样的格式,因为业务复杂多变,所以除了最基础的那些原则,另外一般是根据搜索频率、搜索有效性质来排序拼接成rowkey,在最近开发中设计了一个操作日志表,设计的rowkey为:操作Id+时间戳+模块。这样做可以快速搜索到某个人的操作日志,但是在实际测试中却遇到了一个查询数据丢失的问题。
正文 首先去hbase,直接shell执行scan:
1scan 'user_log';
得到结果发现hbase本身并没有数据丢失,如下:
而且可以看到scan的结果是按照时间戳正序排序的。那么再跟踪代码中看到构建scan ...
写在前面 生产上出现个es数据不一致的问题,需要用嵌套查询出所有不一致的数据,但是就是一个简简单单的嵌套查询,对于之前一直用java api的人来说,太难了,所以记录下
正文假设需要查询的条件如下:
where deleted = 0 and (iiapIftttId =’’ or iiapIftttId is null)
按照单个查询的规律来写,第一次写成了这样
1234567891011121314151617181920212223242526272829303132333435{ "query": { "bool": {"m...
写在前面 接上文,本文主要是对复现的场景仔细分析下,如何会产生死锁以及该怎么避免?以及后续的思考
正文
接下来我们有机会一步步分析下为什么会出现死锁(因为锁等待50s会自动关闭事务,所以截图内的事务id某个步骤会变化,但是不影响问题分析)
第一步:事务1:select * from lotest where type=’B20’ lock in share mode;
日志如下(无锁等待):
第二步:事务2: select * from lotest where type=’B20’ lock in share mode;
日志如下(亦无锁等待):
...
写在前面 接上文,本文主要是根据前两篇的场景,扩展重现篇章最开始的死锁问题。
正文
上文说的,RR使用gap锁和next-key锁能解决大部分幻读问题,还有某些特定场景还是会出现幻读,如下:
步骤
事务1
事务2
1
select * from lotest where type=’B20’;
success
1 row
2
select * from lotest where type=’B20’;
success
1 row
3
insert into lotest (type) values(‘B20’);
success...
写在前面 接上文,本文主要讲述RR锁的概念和场景
正文
innodb默认隔离级别为RR,本服务用的也是RR,所以我们重点来看下RR相关的东西
假如有如下表:
12345CREATE TABLE `lotest` ( `type` varchar(20) NOT NULL, `name` varchar(255) NOT NULL DEFAULT '1', KEY `idx_order_id` (`type`)) ENGINE=InnoDB DEFAULT CHARSET...
写在前面 在负责一功能优化改造后,测试运行过程中极少几率会出现如下错误,而其他环境却没出现过此错误:
123456789101112131415161718org.springframework.dao.DeadlockLoserDataAccessException: ### Error updating database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException: Deadlock found when trying to get lock; try restartin...
写在前面 接上文
正文1234567891011121314151617181920212223242526272829303132//继续注册void Method::set_native_function(address function, bool post_event_flag) { assert(function != NULL, "use clear_native_function to unregister natives"); assert(!is_method_handle_intrinsic() || function == SharedRunt...
写在前面 既然成功编译和搭建了openjdk的源码及调试环境,则更要继续深入探究openjdk的内部。
这篇文章是基于了解了c、c++的基础语法和概念。
这篇主要浅析在平时jdk源码中比较显眼的一个东西:registerNatives
正文registerNatives在有native方法的jdk基础类里,十分常见,比如:Object,System等等。 常用的写法如下:
1234private static native void registerNatives();static { registerNativ...
写在前面 最近使用hbase进行相关业务日志的存储和搜索,学到了不少新东西,所以记录下
正文进入:hbase shell。
建表语句
如:
create 'resource_data_gather:resource_complete_log',{NAME => 't', VERSIONS => 1, COMPRESSION => 'SNAPPY', BLOOMFILTER => 'ROW', DATA_BLOCK_ENCODING => 'DIFF', TTL...