编译原理之美
宫文学
北京物演科技CEO
立即订阅
8171 人已学习
课程目录
已完结 43 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 为什么你要学习编译原理?
免费
实现一门脚本语言 · 原理篇 (13讲)
01 | 理解代码:编译器的前端技术
02 | 正则文法和有限自动机:纯手工打造词法分析器
03 | 语法分析(一):纯手工打造公式计算器
04 | 语法分析(二):解决二元表达式中的难点
05 | 语法分析(三):实现一门简单的脚本语言
06 | 编译器前端工具(一):用Antlr生成词法、语法分析器
07 | 编译器前端工具(二):用Antlr重构脚本语言
08 | 作用域和生存期:实现块作用域和函数
09 | 面向对象:实现数据和方法的封装
10 | 闭包: 理解了原理,它就不反直觉了
11 | 语义分析(上):如何建立一个完善的类型系统?
12 | 语义分析(下):如何做上下文相关情况的处理?
13 | 继承和多态:面向对象运行期的动态特性
实现一门脚本语言 · 应用篇 (2讲)
14 | 前端技术应用(一):如何透明地支持数据库分库分表?
15 | 前端技术应用(二):如何设计一个报表工具?
实现一门脚本语言 · 算法篇 (3讲)
16 | NFA和DFA:如何自己实现一个正则表达式工具?
17 | First和Follow集合:用LL算法推演一个实例
18 | 移进和规约:用LR算法推演一个实例
实现一门脚本语言 · 热点答疑与用户故事 (2讲)
19 | 案例总结与热点问题答疑:对于左递归的语法,为什么我的推导不是左递归的?
用户故事 | 因为热爱,所以坚持
编译原理 · 期中考试周 (1讲)
期中考试 | 来赴一场100分的约定吧!
免费
实现一门编译型语言 · 原理篇 (12讲)
20 | 高效运行:编译器的后端技术
21 | 运行时机制:突破现象看本质,透过语法看运行时
22 | 生成汇编代码(一):汇编语言其实不难学
加餐 | 汇编代码编程与栈帧管理
23 | 生成汇编代码(二):把脚本编译成可执行文件
24 | 中间代码:兼容不同的语言和硬件
25 | 后端技术的重用:LLVM不仅仅让你高效
26 | 生成IR:实现静态编译的语言
27 | 代码优化:为什么你的代码比他的更高效?
28 | 数据流分析:你写的程序,它更懂
29 | 目标代码的生成和优化(一):如何适应各种硬件架构?
30 | 目标代码的生成和优化(二):如何适应各种硬件架构?
实现一门编译型语言 · 应用篇 (2讲)
31 | 内存计算:对海量数据做计算,到底可以有多快?
32 | 字节码生成:为什么Spring技术很强大?
实现一门编译型语言 · 扩展篇 (3讲)
33 | 垃圾收集:能否不停下整个世界?
34 | 运行时优化:即时编译的原理和作用
35 | 案例总结与热点问题答疑:后端部分真的比前端部分难吗?
面向未来的编程语言 (3讲)
36 | 当前技术的发展趋势以及其对编译技术的影响
37 | 云编程:云计算会如何改变编程模式?
38 | 元编程:一边写程序,一边写语言
结束语 (1讲)
结束语 | 用程序语言,推动这个世界的演化
编译原理之美
登录|注册

14 | 前端技术应用(一):如何透明地支持数据库分库分表?

宫文学 2019-09-13
从今天开始,我们正式进入了应用篇,我会用两节课的时间,带你应用编译器的前端技术。这样,你会把学到的编译技术和应用领域更好地结合起来,学以致用,让技术发挥应有的价值。还能通过实践加深对原理的理解,形成一个良好的循环。
这节课,我们主要讨论,一个分布式数据库领域的需求。我会带你设计一个中间层,让应用逻辑不必关心数据库的物理分布。这样,无论把数据库拆成多少个分库,编程时都会像面对一个物理库似的没什么区别。
接下来,我们先了解一下分布式数据库的需求和带来的挑战。

分布式数据库解决了什么问题,又带来了哪些挑战

随着技术的进步,我们编写的应用所采集、处理的数据越来越多,处理的访问请求也越来越多。而单一数据库服务器的处理能力是有限的,当数据量和访问量超过一定级别以后,就要开始做分库分表的操作。比如,把一个数据库的大表拆成几张表,把一个库拆成几个库,把读和写的操作分离开等等。我们把这类技术统称为分布式数据库技术。
分库分表(Sharding)有时也翻译成“数据库分片”。分片可以依据各种不同的策略,比如我开发过一个与社区有关的应用系统,这个系统的很多业务逻辑都是围绕小区展开的。对于这样的系统,按照地理分布的维度来分片就很合适,因为每次对数据库的操作基本上只会涉及其中一个分库。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《编译原理之美》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(6)

  • janey
    在编译器层面实现分布式数据查询,可以理解为把多表查询提前了吗?只是看起来就一个select语句

    作者回复: 你说的多表,是指同一个表在不同服务器上的分片吗?
    如果一个SQL是涉及多个分片的,解析了SQL以后,是可以针对每个分片重新生成SQL的。但这个需要对语义更深的理解,要把SQL语句变成关系代数的运算(选择、投影、笛卡尔积、Union等),这样就知道如何正确的重组成多个SQL了。

    2019-09-17
    2
  • xiaoma2008
    如果老师对分布式数据库比较熟的话,希望老师能出个分布式查询的课程!

    作者回复: 我最近其实在构思写一个分布式数据访问的工具。跟MyCat的定位会不大相同,是想整体上把数据访问这件事情,对应用透明化。野心有点大。
    因为现在很多用到数据库的应用,其水平扩展能力都困在了数据库这个点上。这个问题不解决,所谓云原生就是在忽视房间里的大象。
    我看资料,已经有一些分布式数据库的商业产品。但要像使用一个单一的数据库一样的使用它,还是有点困难。
    我整理一下这方面的思路,会跟大家分享的。

    2019-11-14
  • zhj
    SQLVisitor代码在哪里了

    作者回复: https://github.com/RichardGong/PlayWithCompiler/blob/master/lab/db/src/main/playdb/SQLVisitor.java

    我在文稿中加一下链接...

    2019-11-05
  • 52rock
    查找delete没有where的SQL

    作者回复: 嗯。这种delete语句肯定比较危险。

    2019-10-03
  • David
    关于编译技术还有什么经典的应用场景吗?老师帮我们拓展一下想象力。

    作者回复: 每个领域都会有这样的场景。
    无论是上层的应用软件(如工资表软件),还是下层的基础软件(如数据库软件)。只要想让软件的功能有一定灵活性的、通用性的,都需要编译技术。
    曾经在Lisp圈里(参见《黑客与画家》),有人说,每个软件做到极致的时候,里面都会包含一个拙劣的Lisp实现。他的意思是,每个软件做到极致,都要有灵活定制的能力,也就是需要编译技术的支持。
    具体来说,每个领域不一样,所以举例子也只能举自己熟悉领域的例子。
    我熟悉的领域:
    1.企业软件:比如ERP软件等。定制能力是否强大,就是优秀的企业软件和平庸的企业软件的区别。现在的企业软件在实施的时候,成本往往很高,就是这方面比较差。我目前手头在做的一门语言,就是在解决这个领域的问题。
    2.中间件/基础软件:这里肯定需要。例子太多了。
    3.GIS,也算一种基础软件吧,也有编程能力。
    其他同学,有的熟悉游戏领域,有的在AI领域,各自都有不同的场景。

    2019-10-01
  • Richie
    老师能不能多讲点,关于SQL解析的内容,更深,更细

    作者回复: SQL的部分展开确实挺多的。
    要不然跟极客时间合作一本书,收集大家的需求,把一些细节更多的展开?
    或者后面做课程升级的时候,考虑扩展一下这部分。

    2019-09-22
收起评论
6
返回
顶部