诸葛彪笑了笑:“问题就是——这些数据怎么存?”
他从本子里抽出一张纸,上面画了一个简单的增值表。
“您看,一个与非门单元,它的逻辑功能可以用真值表描述:输入a、输入b、输出y。四个组合,每个组合对应一个输出。这个真值表,在纸面上很好写,四行两列。但存在计算机里呢?怎么表示?是存成一张表,还是存成一组数?怎么让计算机知道‘这是一个与非门’,而不是一个‘与门’或者‘或非门’?”
陈教授接过那张纸,看了一眼,笑了。
“你这个问题,问到了根子上。”
他站起来,走到书桌前,拿了一张大纸和一支铅笔,坐回沙上。
“你刚才说的真值表,在数学上是一个映射,从输入组合的集合,映射到输出值的集合。这个映射,可以用表来表示,也可以用逻辑表达式来表示。但你说得对,光存这个表不够。计算机要知道‘这是一个与非门’,还要知道它的版图在哪儿、仿真模型在哪儿、测试向量在哪儿。”
本小章还未完,请点击下一页继续阅读后面精彩内容!
他在纸上画了一个树状图。
“你看,单元库是一个‘根’,每个单元是一个‘分支’,每个单元的属性是‘叶子’。这种结构,在数学上叫树。计算机要存这些数据,就需要一种能表示‘树’的数据结构。”
吕辰插了一句嘴:“陈老师,您这么一说,我倒想起一个东西,图书馆。”
陈教授愣了一下:“图书馆?”
“对。”吕辰指着那个树状图,“图书馆里几万本书,是怎么找到想要的那本的?先查卡片目录,找到索书号,再去书架上找。卡片目录就是索引,按书名查、按作者查、按分类查。书架就是存书的地方,索书号告诉你去哪个书架拿。”
陈教授眼睛亮了。
吕辰继续说:“标准单元库,不就是一个‘图书馆’吗?每个单元是一本书,单元型号是索书号,功能分类是分类法。工程师要查一个与非门的参数,就像读者要找一本拓扑学的书,先查索引,找到位置,再去取数据。”
陈教授哈哈大笑:“你这个比方,打得太准了!图书馆的分类法、索引、目录,就是一套数据管理系统。几百年前就有了,只不过管的是书,不是单元库。”
他在纸上又画了一个图,这次是图书馆卡片目录的示意图。
“图书馆的卡片目录,按书名排、按作者排、按分类排。标准单元库,也应该有按型号查、按功能查、按参数查的索引。这就是数据结构里的‘多级索引’,树结构、哈希表,都是为了让计算机不用扫遍所有数据就能找到目标。”
诸葛彪听明白了:“所以,单元库的数据结构,不是一个简单的存起来,是得像图书馆一样,有分类、有索引、有目录?”
“对。”陈教授说,“你这个问题,不是存储问题,是数据结构问题。数据怎么组织,决定了计算机怎么访问、怎么查询、怎么修改。如果组织得不好,数据越多,越难用。”
陈教授靠在椅背上:“图书馆除了放书,还要管借书、还书、谁借了哪本书、什么时候还……”
“这就是数据之间的关系。书和读者之间、读者和借阅日期之间、书和书架位置之间,这些关系,比书本身还重要。标准单元库,也是一样。光把单元存进去不够,还要管谁在用、谁在改、什么时候改的、新版本和旧版本什么关系。”
他拿起铅笔:“怎么存、怎么查、怎么管关系,合在一起,就叫数据库。这不是我明的词,国外已经在搞了。ib给阿波罗计划做了一套系统,专门管数据。叫is,rationanantsyste。就是用来管大型项目的数据的。”
is,ib为阿波罗计划开的,世界上第一个真正的数据库管理系统。
陈教授居然知道这个。
“标准单元库,四百多个单元,几十个参数,还不断在改、在加、在被不同的人用,这就是一个小型的is。需要一套数据管理系统,能存、能查、能改、能管版本、能管谁在用。”
他放下铅笔,看着二人:“这个问题,比造一台计算机还难。计算机是算数的,这个是管事的。算数有公式,管事没有。得自己琢磨。”
诸葛彪低头翻了翻本子:“教授,还有一个问题,跟这个连着。以后分布式系统搭起来了,好几台机器共用一个存储柜。在具体使用过程中,会出现a工程师在改一个与非门的版图,b工程师同时在跑这个与非门的仿真。”
陈教授看着他。
诸葛彪继续说:“a改了一半,b跑出来的结果是旧的还是新的?a改完了,b不知道;b跑完了,a还没改完。最后谁的数据算数?”
陈教授皱起眉头。他拿起铅笔,在纸上画了一个简图。
“你是说——并控制?”
“我就是这个意思。”诸葛彪说,“多个用户同时访问同一份数据,怎么保证每个人看到的是正确的、最新的?”
陈教授想了想:“银行里存钱取钱,两个人同时操作一个账户,也会出问题。银行的解决办法是加锁,一个人在改,别人只能看不能动。或者做日志,谁最后改的算谁的。”
他在纸上写了几个字:锁、日志、版本。
“你说的情况更复杂。工程师不光是在改数据,还在跑计算。跑一个仿真可能要几分钟,这段时间里别人能不能看?能不能改?如果允许别人看,看到的是中间状态还是旧状态?如果允许别人改,改完了仿真结果还算不算数?”
诸葛彪点头:“就是这个意思。我就是担心,系统设计的时候不考虑这些,到时候用起来全是麻烦。”
陈教授在纸上又写了一个词:事务。
“这个问题,国外也在研究。把一组操作打包成一个‘事务’,要么全做完,要么全不做。中间状态别人看不到。做完了再告诉别人‘我改完了’。这就是‘强一致性’,任何时候,每个人看到的数据都是一致的,不会出现‘a看到新的、b看到旧的’这种乱子。”
这章没有结束,请点击下一页继续阅读!
吕辰心里一动,陈教授连“强一致性”这种词都整出来了,这可是后世的规则。
陈教授继续说:“这个问题,年后我让研究生专门查资料。你们做工程的有个说法,磨刀不误砍柴工。数据结构没想好,后头全是坑。”
吕辰又说:“还有一个问题。工程师坐在终端前面,敲一个命令,等半天才有反应,这也不行。”
“什么命令要等半天?”
“比如查一个单元的参数。标准单元库有四百多个单元,每个单元有几十个参数。如果存得不好,查一个参数要扫描整个库,那就慢了。工程师翻手册只需要几秒钟,计算机不能比手册还慢吧?”
陈教授若有所思:“你是说响应度?”
“对。”吕辰说,“用户等不起。翻手册是几秒钟,计算机如果做不到几秒钟,人家还不如翻手册。所以数据组织方式必须考虑‘怎么查得快’,不能每次都从头扫到尾,得有索引,得能直接定位。”