2015 年 8 月,MySQL 5.7.8 开始提供对 JSON 的原生支持 [ doc1, doc2 ]。MySQL 对 JSON 的支持可以说是千呼万唤始出来。2009 年开始 NoSQL 逐渐流行起来,相继出现了键值对数据库、文档数据库、列族数据库、图数据库等各类 NoSQL,解决经典关系型数据库无法解决的痛点。其中,对灵活存储半结构化数据的需求,使得类似 MongoDB 这类文档数据库涌现出来。各大主流关系型数据库也在响应趋势,开始支持半结构化数据。早在 2012 年,PostgreSQL 9.2 就已经添加了 JSON 数据类型 [ ref ]。Oracle 也在 2014 年 7 月发布 12c Release 1 后开始支持 JSON [ ref1, ref2 ]。Facebook 在 MySQL 5.7 没发布之前,对 5.6 版本的 MySQL 添加了存储 JSON 功能,这个特性被 Facebook 命名为 DocStore (Document Database for MySQL at Facebook) [ doc, slides ]。另外,SQL 标准组织行动也很快,在 2014 年 3 月已经完成了 SQL/JSON 标准草案(DM32.2 SQL/JSON Proposals, part1, part2)[ slides ]。完整的草案在 2016 年 12 月正式被采纳为标准,即 SQL:2016。
Elastic Stack 日志分析平台搭建笔记
Elastic Stack(旧称 ELK Stack))是最受欢迎的开源日志平台 [ ref ]。Elastic Stack 由 Elasticsearch、Logstash、Kibana 和 Beats 四个组件组成:
- Beats,是轻量型采集器的平台,从边缘机器向 Logstash 和 Elasticsearch 发送数据。
- Logstash,集中、转换和存储数据,是动态数据收集管道,拥有可扩展的插件生态系统,能够与 Elasticsearch 产生强大的协同作用。
- Elasticsearch,搜索、分析和存储您的数据,是基于 JSON 的分布式搜索和分析引擎,专为实现水平扩展、高可靠性和管理便捷性而设计。
- Kibana,实现数据可视化,导览 Elastic Stack。能够以图表的形式呈现数据,并且具有可扩展的用户界面,供您全方位配置和管理 Elastic Stack。
Java Agent 学习笔记
Java 从 1.5 开始提供了 java.lang.instrument
(doc)包,该包为检测(instrument) Java 程序提供 API,比如用于监控、收集性能信息、诊断问题。通过 java.lang.instrument
实现工具被称为 Java Agent。Java Agent 可以修改类文件的字节码,通常是,在字节码方法插入额外的字节码来完成检测。关于如何使用 java.lang.instrument
包,可以参考 javadoc 的包描述(en, zh)。
开发 Java Agent 的涉及的要点如下图所示 [ ref ]
Java Agent 支持两种方式加载,启动时加载,即在 JVM 程序启动时在命令行指定一个选项来启动代理;启动后加载,这种方式使用从 JDK 1.6 开始提供的 Attach API 来动态加载代理。
Java 外部函数接口:JNI, JNA, JNR
遇到的问题
前段时间开发的时候,遇到一个问题,就是如何用 Java 实现 chdir
?网上搜索一番,发现了 JNR-POSIX
项目 [ stackoverflow ]。俗话说,好记性不如烂笔头。现在将涉及到的相关知识点总结成笔记。
Java 运行时获取方法参数名
本文整理 Java 运行时获取方法参数名的两种方法,Java 8 的最新的方法和 Java 8 之前的方法。
Java 8 的新特性
翻阅 Java 8 的新特性,可以看到有这么一条“JEP 118: Access to Parameter Names at Runtime”。这个特性就是为了能运行时获取参数名新加的。这个 JEP 只是功能增强的提案,并没有最终实现的 JDK 相关的 API 的介绍。查看“Enhancements to the Reflection API” 会看到如下介绍:
Java 编译器 javac 笔记:javac API、注解处理 API 与 Lombok 原理
javac 是 Java 代码的编译器 [ openjdk, oracle ],初学 Java 的时候就应该接触过。本笔记整理一些 javac 相关的高级用法。
javac 命令行
javac 命令行工具,官方文档有完整的使用说明,doc。当然也可以,运行 javac -help
或 man javac
查看帮助信息。下面是经典的 hello world 代码:
MyBatis 生成器的表注释
MyBatis是流行的持久化框架,通过抽象底层的JDBC代码,在类对象和数据库列之间自动映射SQL的参数和结果,以SQL为映射的间接层,实现SQL映射器。MyBatis Generator (MBG) 是一个Mybatis的代码生成器,内省数据库的表,然后自动生成映射表的实体类,并生成CRUD(插入,查询,更新,删除)操作的样板代码。MyBatis,之前所在的公司在用,生成器也在用。虽然生成器大大提供了开发效率,但生成的代码可读性比较低,尤其是自动生成的实体类,如下: