Published on

ARTS 第18周

Authors
  • Algorithm: Reverse String
  • Review: shard
  • Tip: sharding-sphere
  • Share: mycat 从入门到放弃

Algorithm

package org.nocoder.leetcode.solution;

import java.util.Stack;

/**
 * 344. Reverse String
 * Write a function that takes a string as input and returns the string reversed.
 * <p>
 * Example 1:
 * <p>
 * Input: "hello"
 * Output: "olleh"
 * Example 2:
 * <p>
 * Input: "A man, a plan, a canal: Panama"
 * Output: "amanaP :lanac a ,nalp a ,nam A"
 *
 * @author jason
 * @date 2018/11/4.
 */
public class ReverseString {
    public static String reverseString(String s) {
        if (s == null || s == "") {
            return null;
        }
        Stack<Character> stack = new Stack<>();
        for (int i = 0; i < s.length(); i++) {
            stack.push(s.charAt(i));
        }
        int len = stack.size();
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < len; i++) {
            sb.append(stack.pop());
        }
        return sb.toString();
    }

    public static void main(String[] args) {
        System.out.println(reverseString("A man, a plan, a canal: Panama"));
    }
}

Review

Shard (database architecture)

Challenges of Sharding MySQL

  • 选择分片键
  • 架构修改
  • 程序修改
  • 在分片键,分片(数据库)和物理服务器之间进行映射
  • 跨节点事务和ACID事务性

Tip

Sharding-Sphere

近期研究分库分表相关的知识整理和demo https://github.com/yangjinlong86/sharding

Sharding-JDBC定位为轻量级Java框架,在Java的JDBC层提供的额外服务。 它使用客户端直连数据库,以jar包形式提供服务,无需额外部署和依赖,可理解为增强版的JDBC驱动,完全兼容JDBC和各种ORM框架。

  • 适用于任何基于Java的ORM框架,如:JPA, Hibernate, Mybatis, Spring JDBC Template或直接使用JDBC。
  • 基于任何第三方的数据库连接池,如:DBCP, C3P0, BoneCP, Druid, HikariCP等。
  • 支持任意实现JDBC规范的数据库。目前支持MySQL,Oracle,SQLServer和PostgreSQL。

Share

Mycat 从入门到放弃

技术选型真的是个不简单的事情,考虑到方方面面,对于我们目前的现状,分库分表的计划是这样:

  • 为什么要分库分表(结合目前业务发展,未来5年的数据量增长,某些表已经到了600多万,数据库操作的响应速度越来越慢)
  • 分库分表原理、形式、规则、事务处理
  • 分库分表优势劣势分析
  • 技术选型,写demo、测试、性能、技术对比
  • 数据库、项目结构调整
  • 制定开发计划,投入开发改造

三思!大规模MySQL运维陷阱之基于MyCat的伪分布式架构

  • MyCat如何知道数据分片原理,或者说他是如何决定路由路径的?
  • 如果需要扩展节点了,并且需要做rebalance,如何来做?
  • 全局表是什么东西?
  • MyCat究竟做了什么事情?
  • 通过SQL语句的变换,实现分布式是不是有点困难?
  • 在同一个事务中要修改不同节点的数据是如何处理的?
  • MyCat后端数据库的架构是什么,如何保证稳定可靠高可用?
  • 分片多了的情况下,性能是如何保证损失最小的?
  • 配置文件或者配置库出问题,整个集群会出现什么情况?
  • DDL如何进行?
  • 据我调研,MyCat还实现了自动故障切换的功能,请问这个靠谱么?
  • 在MyCat上面备份是如何做的?能做到恢复一个快照吗?
  • 如果已经在使用MyCat了,发现他的风险确实太大了,我如何能下掉呢?
  • MyCat的配置复杂吗?上手容易么?
  • 最后一个问题,现在做分库分表做得好的有哪些?

兼容MySQL的开源分布式数据库SequoiaDB在去哪儿网的实践