分类

数据库

MySQL 迁移 utf8 到 utf8mb4

MySQL 版本和驱动 MySQL 至少是 5.5.3+mysql-connector-java 至少是 5.1.13,修改连接串参数 characterEncoding=UTF-8 历史数据迁移 生成表字符迁移 SQL: SELECT CONCAT( 'ALTER TABLE ', TABLE_NAME, ' CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;' ) AS mySQL FROM INFORMATION_SCHEMA. TABLES WHERE TABLE_SCHEMA = 'your_schema' 生成后执行一把,这样表和列的字符集就改完了。我这里通过修改表的字符集就自动修改列的了,最好自己确认下列是否已经改对。 修改库字符集: ALTER DATABASE your_schema CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci; 上面示例代码中的 COLLATE(排序规则)请按需修改。 关于连接串参数 characterEn....

More...

基于数据库复制的技术架构讨论

背景 这里的数据库复制指的是将 业务数据库实例上的库通过同步机制(比如 MySQL binlog)实时(比如最大延迟为 3s)复制到其他数据库实例上,这些实例库只做查询,不做数据写入。 这套架构设计的主要优势: * 各业务应用能够方便地在自己的 DB 实例上进行业务查询,比如通过 join 主业务库 * 在不明确业务边界、没有梳理好业务对应技术模块时可以最小成本进行变更或扩展 * 实现读写分离,提升性能 ### 一些问题 实际在实施过程中主要遇到两个问题: 1. 不可能实时完成数据同步,将造成业务上面的不一致,比如调用主库服务更新数据后,在业务库上不能实时查询到已更新的数据 2. 很难保证高可用(在使用阿里 DTS 时出现过多次问题,自己做主从可能会好一些) 为了满足业务发展,复制库的数量会逐步增多(比如新开一个产品可能就需要多复制一套库),以上两个问题可能会导致严重的故障, [CAP] 不能兼得。 ### 服务化 基于数据库复制架构的核心理念是将数据源暴露给应用,开发者直接针对数据源进行开发,是一种非常直接的方式。 但随着业务的逐渐清晰,一些业务逻辑是可以抽....

More...

敏感数据处理

背景 大多数应用或多或少都会涉及到敏感数据处理,比如用户的手机号、身份证号,甚至银行卡账号。作为应用的开发者,如何 安全地 维护这些敏感数据呢? 这里讨论的安全不是指服务器如何保护,而是在数据库层面做敏感数据的分离: * 业务库中不保存敏感数据,只保存混淆过的数据,比如电话字段保存的是 133****9961,在数据层面就进行脱敏 * 敏感数据统一保存在另一个库中,有应用调用一个服务来建立原值和混淆值的映射关系 * 业务库中因为保存的是脱敏过的数据,通过只读复制镜像可以很方便地提供给其他服务使用,比如 OLAP * 除了技术开发上方便,运维上也方便了很多,降低了敏感数据被暴露到外部的可能性 ### 技术设计 提供服务接口给应用存取敏感数据,本质上是一个 KV 存取服务。 1462956107181 一些细节: * 表 protyle 的 domain 字段用于标识该记录的作用域,在一个作用域上相同的值要保证唯一 * 表 protyle 的 ha....

More...

标签服务实现漫谈

标签服务是一个较为通用的基础业务服务,比如博客系统对文章加标签、社交网络中为好友添加印象、收藏的歌曲贴标签方便整理等等。 其主要提供两类接口: 标签实体的管理/查询:负责标签实体的 CRUD 标签关联的管理/查询:将外部业务实体与标签建立/删除关联,根据外部业务实体 id 查询标签集 RDB 实现 基于关系型数据库的实现是最容易的,并且上大多数应用也是这样做的。 建立 tag 表,其中包含了 tag 的基础属性,例如 name、description 等 建立 tag_rel 关联表,其中主要包含了 object_id、tag_id 管理服务(创建/更新/删除)的实现非常容易;根据 object_id 查询其对应的标签集也很容易实现: SELECT tag_rel.tag_id, tag_rel.object_id, tag.name FROM tag_rel LEFT JOIN tag ON tag_rel.tag_id = tag.tag_id WHERE tag_rel.object_id = '2db775c1d2174a8c67fc39b86c3fc168' 问题 ....

More...

NetBeans 时事通讯(刊号 # 324 - Apr 14, 2015)

NetBeans Logo现在的 netbeans.org 瞬息万变。为了帮助您快速的获得最新消息,一个由志愿者组成的团队会每周收集与 NetBeans 相关的时事通讯,包括文章,教程,重要事件等等。

刊号 # 324 - Apr 14, 2015

More...

Golang MySQL LOAD DATA LOCAL INFILE 使用

  ,

在往 MySQL 写入大量数据时直接 insert 效率太低,应该使用 MySQL 的 LOAD DATA LOCAL INFILE。

More...

Cobar 概述

Cobar 是由 Alibaba 开源的 MySQL 分布式处理中间件,它可以在分布式的环境下看上去像传统数据库一样提供海量数据服务。

More...

MySQL 自动备份 Shell 脚本

可以选择设置需要备份的库,自动备份压缩,自动删除 7 天前的备份,需要使用 crontab 定时执行。

More...

NetBeans 时事通讯(刊号 # 243 - Jun 08, 2013)

NetBeans Logo现在的 netbeans.org 瞬息万变。为了帮助您快速的获得最新消息,一个由志愿者组成的团队会每周收集与 NetBeans 相关的时事通讯,包括文章,教程,重要事件等等。

刊号 # 243 - Jun 08, 2013

More...

PL/SQL Developer 与 Oracle 精简客户端

本文介绍如何安装 PL/SQL Developer 9 与 Oracle 精简客户端。

More...

十个 JDBC 最佳实践

JDBC是Java为多种关系型数据库提供的统一的访问接口,以下是我长期使用JDBC总结的十个最佳实践。

More...

NetBeans 时事通讯(刊号 # 196 - Jun 05, 2012)

NetBeans Logo现在的 netbeans.org 瞬息万变。为了帮助您快速的获得最新消息,一个由志愿者组成的团队会每周收集与 NetBeans 相关的时事通讯,包括文章,教程,重要事件等等。

刊号 # 196 - Jun 05, 2012

More...

Java 开源博客——B3log Solo 0.4.5 正式版发布了!

B3log Logo

Java 开源博客 —— B3LOG Solo 0.4.5 正式版发布了!项目已经迁往 GitHub

支持多编辑器(TinyMCE、KindEditor、Markdown),改进了对服务路径的支持。

More...

NetBeans 时事通讯(刊号 # 195 - May 29, 2012)

NetBeans Logo现在的 netbeans.org 瞬息万变。为了帮助您快速的获得最新消息,一个由志愿者组成的团队会每周收集与 NetBeans 相关的时事通讯,包括文章,教程,重要事件等等。

刊号 # 195 - May 29, 2012

More...

NetBeans 时事通讯(刊号 # 194 - May 23, 2012)

NetBeans Logo现在的 netbeans.org 瞬息万变。为了帮助您快速的获得最新消息,一个由志愿者组成的团队会每周收集与 NetBeans 相关的时事通讯,包括文章,教程,重要事件等等。

刊号 # 194 - May 23, 2012

More...

Java 开源博客——B3log Solo 0.4.1 正式版发布了!

B3log Logo

Java 开源博客 —— B3LOG Solo 0.4.1 正式版发布了!

从 0.4.1 开始,B3log Solo 正式同时支持 GAE 平台与常规 Servlet 容器。

More...

NetBeans 时事通讯(刊号 # 187 - Apr 01, 2012)

NetBeans Logo现在的 netbeans.org 瞬息万变。为了帮助您快速的获得最新消息,一个由志愿者组成的团队会每周收集与 NetBeans 相关的时事通讯,包括文章,教程,重要事件等等。

刊号 # 187 - Apr 01, 2012

More...

分布式事务原理

本文是对分布式事务原理、规范的科普,主要围绕两阶段提交协议展开。最后描述了在应用框架层面模拟两阶段提交协议的简化设计。

More...

NetBeans 时事通讯(刊号 # 182 - Feb 22, 2012)

NetBeans Logo现在的 netbeans.org 瞬息万变。为了帮助您快速的获得最新消息,一个由志愿者组成的团队会每周收集与 NetBeans 相关的时事通讯,包括文章,教程,重要事件等等。

刊号 # 182 - Feb 22, 2012

More...