AppBoxFuture(三): 分而治之
系统数据量达到一定程度后必将采用分库分表的方式来提高系统性能,但传统的分库分表方式也必将带来更高的开发复杂程度。新一代的NewSql及NoSql数据库由于天生的分布式存储基因,既保证了能够横向扩展,又可以避免较高的开发复杂程度。AppBoxFuture框架的存储引擎借鉴了新一代分布式数据库分而治之的思想,在设计实体模型时可以指定分区键,存储引擎会根据分区键创建相应的RaftGroup(多个副本)。需要注意的是AppBoxFuture框架的分区策略与NewSql不同,NewSql一般采用自动分裂与合并的方式来管理分区,而框架采用的是一开始就指定分区键的方式,更类似于Cassandra的分区方式,但又不同于Cassandra的分区不能排序。
在设计实体模型时先要估算数据量来确定是否需要分区存储,一般的基础信息如客户信息之类的不需要分区,但订单之类的动态数据,可以根据年或月份作为分区键,如果是SaaS类的应用,可以用租户Id + 期间作为分区键。
作者录了个演示视频演示视频链接, 简单说明一下演示内容:
- 新建车辆状态(VehicleState)实体模型,加入VehicleId, Lng, Lat成员, 设置分区键为VehicleId;
- 新建测试服务并发插入8万条记录,计算每秒tps(演示视频20行 i < loopCount 应为 j < loopCount)。
在作者的虚拟机内(4C8G)的进行单分区并发插入的测试结果如下图, 虚拟机Cpu已经跑满。实际单独测试存储引擎(C++)可达40000/秒,Clr层代码还有优化的空间。
作者下一步的开发重点是:
- 设计与实现索引扫描api;
- 设计与实现聚合扫描api,可以并行聚合各分区;
- 实体间关系EntityRef, EntitySet实现。
如果您觉得该项目将来能帮到您,请您扫以下二维码打赏一下作者以购买测试VM;如果您有问题或Bug报告,请在Github提交。
AppBoxFuture(三): 分而治之的更多相关文章
- 信息处理,分而治之-- ESFramework 使用技巧
ESFramework开发手册系列文章已经详细介绍了如何使用ESPlus提供的ESPlus.Application.CustomizeInfo空间来发送和处理自定义信息,而且,在我们在前面介绍的de ...
- 程序员编程艺术第三十六~三十七章、搜索智能提示suggestion,附近点搜索
第三十六~三十七章.搜索智能提示suggestion,附近地点搜索 作者:July.致谢:caopengcs.胡果果.时间:二零一三年九月七日. 题记 写博的近三年,整理了太多太多的笔试面试题,如微软 ...
- 《OD学hadoop》第三周0709
一.MapReduce编程模型1. 中心思想: 分而治之2. map(映射)3. 分布式计算模型,处理海量数据4. 一个简单的MR程序需要制定map().reduce().input.output5. ...
- 从腾讯QQgame高性能服务器集群架构看“分而治之”与“自治”等分布式架构设计原则
转载:http://space.itpub.net/17007506/viewspace-616852 腾讯QQGame游戏同时在线的玩家数量极其庞大,为了方便组织玩家组队游戏,腾讯设置了大量游戏室( ...
- HDU ACM 1007 Quoit Design 分而治之的方法,最近点
意甲冠军:给n坐标点.半一对点之间的距离所需的距离最近. 分析:分而治之的方法,最近点. #include<iostream> #include<algorithm> #inc ...
- Redis系统学习 三、使用数据结构
前言:上一章,简单介绍了5种数据结构,并给出了一些用例.现在是时候来看看一些高级的,但依然很常见的主题和设计模式 一.大O表示法(Big O Notation ) 常用时间复杂度O(1)被认为是最快速 ...
- 前端资讯周报 3.6 - 3.12: 对学习Javascript最有帮助的三本书,以及HTML标题的迷思
每周一我都会分享上一周我订阅的技术站点中,和解决问题的过程中阅读到的值得分享的文章. 毕竟个人的阅读量有限,也欢迎大家留言或者私信给我你们阅读到的,对你们前端技术有帮助的任何内容,题材不限,语言不限. ...
- 化繁为简(三)—探索Mapreduce简要原理与实践
目录-探索mapreduce 1.Mapreduce的模型简介与特性?Yarn的作用? 2.mapreduce的工作原理是怎样的? 3.配置Yarn与Mapreduce.演示Mapreduce例子程序 ...
- 分而治之(Work Breakdown Structure, WBS)
不知道大家有没有和我一样的情况,就是想写一篇博客,不知道从何写起,如何组织语言,如何安排这篇博客的要交待的事情的前因后果:如果在写作过程中被打断,又不知道如何重新拾起键盘,从哪里写起."就如 ...
随机推荐
- sql查询优化策略
Sql语句执行顺序: 查询的逻辑执行顺序 (1) FROM left_table (3) join_type JOIN right_table (2) ON join_condition (4) WH ...
- 机器学习(九)隐马尔可夫模型HMM
1.隐马尔可夫HMM模型 一个隐马尔可夫模型可以表示为\[\lambda=\{A,B,\pi\}\]具体就不说了,比较基本. 2.HMM模型的三个基本问题 1.概率计算问题:给定\(\lambda\) ...
- Java课程之团队开发(NABCD需求分析)
N.需求 1.学生基本的录入课程功能 2.学生对于空教室使用的需求(自习或者是活动占用) 3.学生对于具体课程的查询需求 A.做法 1.制作出基于安卓的课程查询,录入以及教室查询应用软件 B.好处 1 ...
- 搭建 RTMP 服务器
主要步骤 具体步骤 FAQ docker 搭建版 参考 主要步骤 下载 nginx 的 rtmp 模块 编译nginx,带 hls,rtmp 配置 nginx.conf,设置 rtmp 的推流文件路径 ...
- vue — 安装并创建vue项目
1.先从node.js官网(https://nodejs.org/en/download/) 下载并安装node,然后通过在命令行输入node -v命令,查看node的版本,要是出现相应的版本号就证明 ...
- unittest中忽略某些测试用例的执行
添加装饰器(@unittest.skip("")) from init import * import unittest class baidu(Info): @unittest. ...
- 如何用VSCode调试Vue.js
VS Code相关插件:Chinese (Simplified) Language Pack for Visual Studio Code Debugger for Chrome ESLint Vet ...
- Axure环境安装,组件引入,使用示例
资源下载: Axure的中文官方下载地址:https://www.axure.com.cn/3510/ Axure汉化包:https://www.axure.com.cn/2616/ Axure元件库 ...
- [Swift]LeetCode889. 根据前序和后序遍历构造二叉树 | Construct Binary Tree from Preorder and Postorder Traversal
Return any binary tree that matches the given preorder and postorder traversals. Values in the trave ...
- websocket+rabbitmq实战
1. websocket+rabbitmq实战 1.1. 前言 接到的需求是后台定向给指定web登录用户推送消息,且可能同一账号会登录多个客户端都要接收到消息 1.2. 遇坑 基于springbo ...