第503章 数据库(2/2)
IMS,IBM为阿波罗计划开发的,世界上第一个真正的数据库管理系统。
陈教授居然知道这个。
“标准单元库,四百多个单元,几十个参数,还不断在改、在加、在被不同的人用,这就是一个小型的IMS。需要一套数据管理系统,能存、能查、能改、能管版本、能管谁在用。”
他放下铅笔,看着二人:“这个问题,比造一台计算机还难。计算机是算数的,这个是管事的。算数有公式,管事没有。得自己琢磨。”
诸葛彪低头翻了翻本子:“教授,还有一个问题,跟这个连着。以后分布式系统搭起来了,好几台机器共用一个存储柜。在具体使用过程中,会出现A工程师在改一个与非门的版图,B工程师同时在跑这个与非门的仿真。”
陈教授看着他。
诸葛彪继续说:“A改了一半,B跑出来的结果是旧的还是新的?A改完了,B不知道;B跑完了,A还没改完。最后谁的数据算数?”
陈教授皱起眉头。他拿起铅笔,在纸上画了一个简图。
“你是说——并发控制?”
“我就是这个意思。”诸葛彪说,“多个用户同时访问同一份数据,怎么保证每个人看到的是正确的、最新的?”
陈教授想了想:“银行里存钱取钱,两个人同时操作一个账户,也会出问题。银行的解决办法是加锁,一个人在改,别人只能看不能动。或者做日志,谁最后改的算谁的。”
他在纸上写了几个字:锁、日志、版本。
“你说的情况更复杂。工程师不光是在改数据,还在跑计算。跑一个仿真可能要几分钟,这段时间里别人能不能看?能不能改?如果允许别人看,看到的是中间状态还是旧状态?如果允许别人改,改完了仿真结果还算不算数?”
诸葛彪点头:“就是这个意思。我就是担心,系统设计的时候不考虑这些,到时候用起来全是麻烦。”
陈教授在纸上又写了一个词:事务。
“这个问题,国外也在研究。把一组操作打包成一个‘事务’,要么全做完,要么全不做。中间状态别人看不到。做完了再告诉别人‘我改完了’。这就是‘强一致性’,任何时候,每个人看到的数据都是一致的,不会出现‘A看到新的、B看到旧的’这种乱子。”
吕辰心里一动,陈教授连“强一致性”这种词都整出来了,这可是后世的规则。
陈教授继续说:“这个问题,年后我让研究生专门查资料。你们做工程的有个说法,磨刀不误砍柴工。数据结构没想好,后头全是坑。”
吕辰又说:“还有一个问题。工程师坐在终端前面,敲一个命令,等半天才有反应,这也不行。”
“什么命令要等半天?”
“比如查一个单元的参数。标准单元库有四百多个单元,每个单元有几十个参数。如果存得不好,查一个参数要扫描整个库,那就慢了。工程师翻手册只需要几秒钟,计算机不能比手册还慢吧?”
陈教授若有所思:“你是说响应速度?”
“对。”吕辰说,“用户等不起。翻手册是几秒钟,计算机如果做不到几秒钟,人家还不如翻手册。所以数据组织方式必须考虑‘怎么查得快’,不能每次都从头扫到尾,得有索引,得能直接定位。”
陈教授笑了,在纸上画了一个树状图,又画了一个格子图。
“你这个问题,就是索引和检索。树结构、哈希表,都是为了让计算机不用扫遍所有数据就能找到目标。你把图书馆的卡片目录搬过来就行,按型号建一个索引,按功能建一个索引,按参数建一个索引。想查什么,先查索引,再取数据,不用扫遍整个库。”
他在哈希表旁边写了两个字:O(1)。
“这就是数学上的常数时间,不管库有多大,查一次的时间是一样的。你要的低延迟,就是这个。”
吕辰接着追问:“还有一个问题,算得慢。”
“算什么?”
“仿真。一个与非门单元,跑一遍仿真,可能要几分钟。四百多个单元,每个跑一遍,就是几十个小时。这还只是一个版本。工程师改一版,又要重新跑。”
陈教授放下铅笔,靠在椅背上:“你是说吞吐率?高吞吐?”
“对。”吕辰说,“不能让大家排队等着。得让机器同时跑多个仿真,A工程师的与非门在跑,B工程师的或非门也在跑,互不干扰。这就是您刚才说的并发,但不是‘数据并发’,是‘计算并发’,多个人同时用,机器不能闲下来。”
陈教授想了想:“这个问题,比前两个复杂。前两个是‘怎么存’‘怎么查’,这个是‘怎么调度’。多个任务同时提交,谁先算、谁后算、怎么分配算力。如果机器够多,还可以并行算,一个任务拆成几块,几台机器同时算,算完了再拼起来。”
他在纸上画了一个任务队列的图。
“这个在数学上叫调度算法。我们要的是单位时间内处理的任务尽可能多。但不是越多越好,还要考虑每个任务的等待时间。这就是权衡。”
吕辰最后说:“还有一个问题,也是最头疼的。”
陈教授看着他。
吕辰说:“集成电路设计,不是一个人干的活。有人画版图,有人跑仿真,有人做测试。版图画好了,仿真模型要跟着改;仿真模型改了,测试向量也要跟着改。这些数据是连着的,这边改了,那边不知道,就乱了。”
陈教授坐直了身子:“你是说——模型耦合?”
“对。”吕辰说,“版图、仿真模型、测试向量,是同一个单元的不同侧面。它们应该是一体的,改版图的时候,系统应该提醒仿真模型可能也要改;跑仿真的时候,系统应该自动用最新的版图数据。不能这边改完了,那边还在用旧的。”
陈教授沉默了一会儿,站起来走到书架前,抽出一本书翻了翻,又放回去。
他转过身,看着吕辰:“你这个问题,比前面几个都深。前面是‘怎么存’‘怎么查’‘怎么算得快’,这个是‘怎么让不同的数据保持同步’。”
他走回来坐下,拿起铅笔,在纸上画了一个有向图,几个圆圈,箭头从一个指向另一个。
“这涉及到数据之间的依赖关系。A改了,B要跟着改,C也要跟着改。这种依赖关系,可以用有向图来表示。节点是数据,边是依赖关系。A指向B,表示A改了B要跟着改。”
吕辰二人凑过去看那个图,诸葛彪道:“那计算机能不能自动知道这种依赖关系?工程师改了一个单元的版图,系统自动找出所有依赖它的仿真模型和测试向量,提示这些也要更新?”
陈教授点点头:“理论上可以。但依赖关系要定义清楚,数据要能追踪来源和去向。这又回到数据结构的问题,数据不能孤立地存,要存它们之间的关系。这就是刚才说的模型耦合,不同模型之间怎么对齐、怎么同步、怎么保证一致性。”
陈教授放下铅笔,靠在椅背上,看着茶几上那张画满图的纸,沉默了好一会儿。
“诸葛、小吕,你们今天问的这几个问题,多个人同时用、查得快、算得快、数据对得上,其实是一个问题。”
吕辰二人听着。
陈教授说:“就是怎么把标准单元库的数据组织好,让计算机既能存、又能查、还能管住它们之间的关系。这不只是一个‘库’,这是一个‘知识系统’。就像图书馆不只是放书的地方,还是一个能查、能借、能管住书不丢、能知道谁借了哪本书的系统。”
他端起茶杯喝了一口,又放下。
“咱们刚才讨论了‘强一致性、低延迟、高吞吐、模型耦合’,你们说的那些问题,就是这几个词的意思。”
吕辰二人对视一眼。
陈教授继续说:“一致性,就是多个人同时用的时候,数据不能乱。延迟,就是查东西不能等。吞吐,就是算东西不能太慢。耦合,就是不同模块的数据要能对上。”
他看着二人,笑了笑:“你们想的问题,跟国外那些搞数据库的人想的一样。你们从用户的角度,把需求说清楚了。剩下的事,怎么实现,是我们搞数学和搞理论的事。”
又坐了一会儿,诸葛彪站起来:“教授,那我们就不打扰了。您过年好好歇几天,年后见。”
陈教授送他们到门口,他忽然想起什么:“你们今天说的这几个问题,每一个都是真问题,我记下来了,会在存储柜的设计中考虑进去。”
吕辰点头:“打扰教授了。”
陈教授摆摆手:“打扰什么?用户提需求,施工方负责落实,这样才好,那些问题,从在办公室里可想不出来,还得听听一线的声音。”
二人了门,一路出了燕园。
吕辰问道:“诸葛师兄,这个放心了吧?”
诸葛彪点点头:“放心了,陈教授太厉害了,我现在好后悔,当时为什么不学数学。”
吕辰笑道:“得了吧,数学这碗饭,你确定啃得动?”
诸葛彪不服道:“怎么啃不动?咱可以啃简单的!”
吕辰打击道:“你不学数学,见他如井中蛙观天上月,你要是学了数学,见他如蜉蝣见青天。”
诸葛彪哈哈笑了起来:“你敢说我是蜉蝣?”
吕辰继续打击道:“严格来说,你不算蜉蝣,你是井中蛙!”
雪地上,两行脚印歪歪扭扭地延伸向前方。