reduce后端设计
在进行reduce软件设计的时候,我希望尽量保证软件操作的简单性。
通过一些巧妙的设计可以避免设计出复杂的软件,因此数据结构需要被文档化。
值得注意的是,这是reduce软件的v0。1版本,因此尚不确定reduce的数据结构会不会在今后的日子里大改,不过按照目前的心境来说,是可以设计出一个简单、强大的数据结构的。
reduce的后端存储严重依赖redis。我受到unix软件的设计启发,长期使用命令行等工具进行工作。我发现这种哲学带给我无尽的价值。reduce背后承载的思想非常宏大,所以必须按照经验来进行软件设计,因此我采用了最小工具集成的方式设计reduce。
redis的数据结构我采用了散列表和队列两种数据结构,下面我将按照图形的方式介绍其在reduce中的应用,相信你很快就会认同reduce采用这两种数据结构的巧妙之处,并萌生出为reduce设计无数扩展的想法。
前端模型需要和后端数据进行绑定,因此后端的进行才使得reduce向前推进。
先来看前端概念诞生的模型:
会发现一些行为:
增加concept
增加question
concept转question
question转concept
concept:横向推理concept
concept:横向质疑question
横向推理是用户的主观行为,不需要保存。
横向质疑是用户的主观行为,不需要保存。
上面这些操作都是最基础的操作。
对于删除和查询这两类操作来说,reduce算法会把两个conceptquestionconceptquestion之间所有的节点统统消灭,让其只剩下一个可以修改的conceptquestion。然后附着一个资源栈来链接提到的资源。
资源栈的设计是为了存储各种资源,目的是方便交流,方便在回溯的时候查找。
所有的资源具有唯一性,因此,采用hash表来进行存储是一种十分理想的情况。
后续如果侦测到同一类型的资源,就可以直接复用。
资源栈设计完成了,紧接着就是剩余数据结构的设计了。
在大概了解了redis的数据结构后,我开始进行接下来的设计。
在redis中,有一种特殊的数据结构叫做散列表。我的计划是使用topic当做散列表的key,然后topic内部的conceptquestion进行kv的映射。
采用这样的模型,在后续topic的设计升级成语义树的情况下,就有可能向上兼容升级为topic的语义树模型管理。
具体内部是如何实现kv型数据结构呢?structItem{
id:i128,
str:String,
reduceresource:OptionVecString,
isfreshman:bool,
isquestion:bool,
left:Option,
top:Option,
}
一些说明
id我采用的是全局唯一自增长的id,不会考虑不够的情况。
每生成一个新的节点,都会生成一个新的全局自动增长的id,
每逻辑删除好多个节点,回到刚开始的那个节点,那个节点的id并不会更新。
str是conceptquestion的内容。
reduceresource中值为hash。
lefttop为指针指向和其他Item的关系。
reduce的存储
reduce是一个非常常用的操作,常用到他必须要有一种好用的数据结构来描述。但是我不想引入过多复杂的,脏的关系的描述,想要用巧妙的方法来记录reduce。
其实我想解决的问题是reduce的遍历问题,只要能按照时间顺序将其完美的进行遍历就ok了。
我使用了redis中提供的队列的数据结构,它能够根据key生成一个队列,这个队列其实是某个操作队列,记录着所有生成Item的时间过程。
一个点的关系我使用了left和top来描述。在构建这张图时,需要准备一个队列,随着这个队列元素的出队,会逐渐构建其这张图的全貌。
当元素1出队时,寻求构建它的left和top,发现都是None,则绘制1,完毕。
当元素2出队时,寻求构建它的left和top,发现2的left是1,则绘制1到2的边,完毕。
会不会存在2的left和top都有值的情况?不会。假设存在这种情况,那么就必然会有即向右构建,还向下构建的节点。在构建阶段是不存在这种节点的。在reduce阶段存在吗?不会。因为reduce其实他的一个核心操作是从一个叶子节点开始,将其路上所有的节点消灭,然后形成新的叶子节点。也就是最终的节点它非但right和bottom不会增加新的,反而会变成None。这种情况下,就保证了left和top只能最多有一个存在的唯一性。
当元素3出队时,需求构建它的left和top,发现2是它的top,因此绘制3。这些都是ok的。这样,按照队列的顺序遍历,其实整个图就可以确定。我们发现会存在4,5,4这样的节点,因此我们说这样的节点有一个reduce。
具体情况是这样的,4,5,4时,遍历到第二个4时,发现已经绘制了4,就知道这是一个Reduce节点。
然而,这种数据结构能否处理更为复杂的reduce情况呢?让我们用例子来说明。
在这个观点下,有几个可以观测到的概念:
出现两次及以上的点都是Reduce的点
Reduce的次数(点出现的次数1)
Reduce的顺序可以按照Reduce匹配的右边的点从左往右数。constqueue〔〕;
constreducesequence〔〕;
for(vari0;iqueue。length;i){
varnodequeue〔i〕;
if(queue。slice(0,i)。includes(queue〔i〕)){
thisisareduceclosenode
reducesequence。push(queue〔i〕);
}
}
富时A50跌幅一度逼近2,国庆期间,国际市场正常交易今天虽然还在我们国庆假期期间,但是国际市场已经正常交易了,受李嘉诚基金减持影响,港股邮储大跌,毕竟李嘉诚是响当当的华商,曾经的亚洲首富,可想而知,他旗下的基金行为对市场起到了一定的
Torah漩涡协议数据存储与碳中和交易市场的杀手级产品近几十年来,碳中和一直被视为气候变化解决方案的一部分,而在制造业交通运输和农业等碳密集型行业因生态缺陷而习惯于公众批评之际,数据创建已成为另一个问题。全球每日正在创造比以往更多的数
湘财证券肝病创新疗法破局在即掘金巨大Unmet蓝海市场智通财经APP获悉,湘财证券发布研究报告称,肝病因病理复杂十几年来治疗药物更新节奏缓慢,甚至在NASH领域治疗药物仍为空白,肝病领域存在巨大的Unmet临床需求。同时因产品管线老化
嫌油价不够高,他们准备搞一个大动作10月3日(周一)亚洲早盘中,布油一度涨超3,截至发稿时涨2。72报87。46美元桶WTI原油也涨超3,截至发稿时涨2。76报80。89美元桶。据央视新闻援引外媒消息,欧佩克与非欧
消费券释放的消费潜力由于众所周知的原因,这三年里普通老百姓的消费能力普遍下降。外部对于疫情的控制更是国才糟,也间接影响了普通老百姓的消费能力!中国老百姓普遍喜欢存钱,可以说是寅存卯粮。小孩抚养老人赡养
9月Android次旗舰机排行出炉天玑8系U霸榜骁龙870垫底稿源cnBeta转眼已是10月,安兔兔日前发布了9月份的安卓次旗舰手机性能排行,联发科天玑8系处理器强势霸榜前九位,而骁龙阵营仅有一款骁龙870的手机垫底。榜单显示,搭载天玑810
国庆不停工!近千名建设者坚守工地一线工人日报中工网记者庞慧敏通讯员谢吕容今年国庆继续坚守岗位干活,把项目干好了,加快建设自己家乡,内心感到高兴,项目在国庆期间为我们准备了面包饮料等慰问物资,很温暖。在广西崇左,中建五
众星出席国庆晚会造型李宇春短发搭配蛋糕裙,周冬雨孙俪状态好备受期待的国庆晚会来啦!央视晚会依旧以特别节目形式呈现,于10月1日晚上8点在1台和3台播出,主持人分别是康辉任鲁豫朱迅和王嘉宁。朱迅王嘉宁造型还是很用心的,朱迅红裙子搭配金色耳饰
国庆期间,何必远行,就在金堂乡村玩个够!秋天是一年里最宜人的季节国庆佳节到来暂且放下繁忙的工作如果生活让你感到迷茫背上行囊不必远方金堂自有美好风光就在金堂来一场说走就走的乡村旅行感受惬意的田园风光吧金堂乡村旅游点1油橄榄
喜之郎果冻是怎么跌下神坛的?大家好,我是小肥良。提起果冻,喜之郎必然是一个绕不开的话题。作为果冻行业最负盛名的品牌之一,喜之郎巅峰时曾一度占据我国果冻市场70的市场份额。然而时至今日,果冻早已不是超市小卖部的
2023年湖南居民医保筹资标准不低于960元人日前,省医疗保障局国家税务总局湖南省税务局省教育厅省民政厅省财政厅省乡村振兴局省残疾人联合会联合发布关于做好2023年度城乡居民基本医疗保险参保缴费工作的通知(湘医保发202241