功能需求
- 数据库中已有的数据为不下于百万条的记录数目,每条记录都包含域名,emai,ip的信息,我们需要实现能够通过某个domain,email或ip将对应的相关信息查找出来
(比如说:现在有一个email为admin@juming.com我们需要查找与之相关的所有ip,或者是domain)现在我的实现方式是将所有(由于数据太多,当前限制了数据量,并不是所有)email为admin@juming.com的记录,并将需要展示的记录展示出来,这样也是为了简化逻辑,便于查询接口的统一,只需要在展示的方法中注明需要展示的字段即可 - 实现历史记录功能,能够记录并显示操作的历史,并且能够一次性撤销多次操作,而且能够恢复撤销的操作,若有了新的动作,则之前的在此动作之后的痕迹不会被恢复,每一个动作与历史记录面板上的显示内容保持一致
- 导入导出功能,实现查询信息的显示与选择性导出
模块设计
-
主分析模块:该模块核心在d3的力导向图,核心数据结构为nodes数组和links数组,这两个数据结构存储分析模块的几乎全部信息,nodes数组存储相应的记录信息(包括domain,emails,ip),links存储了节点之间的关系,其他需要调整的话可以调整d3中force的相应参数
在代码中分析模块的核心代码在getObjectByEmail_maybeFinal.js中,相应的对象为network对象,相应的数据结构和方法全部封装在此对象中,下面是该对象的接口说明
1.1 setup :初始化network对象的一些参数,(nodes,links,width,height,linkedByIndex,actionStack:动作栈,redostack:恢复栈,circle_radius:节点半径,还有一些开关标记在相应模块中会有说明) 1.2 addChild : obsoleted
1.3 addHistoryElement(nodeId,elementType,expandType) : 在历史记录模块
1.4 addLink(childId,targetId) : 根据子节点与父节点添加id
1.5 addNode(ob) : 根据记录对象添加节点,与时间模块有关联(添加到nodes之后会将信息同步到时间数组
1.6 addNodes(arr) : addNode的批量版本
1.7 connectedNodes(thisNodeId) : 实现将该node有边关联的节点高亮显示,其他节点透明度降低 1.8 deleteChildren(nodeId,type) : 根据nodeId删除该node的类型为type的孩子节点,如果type= -1,删除全部孩子节点
1.9 deleteThisNode(d) :删除相应节点,并同步相应历史记录(问题,应该同步还是应该一起??,当前是耦合在一起)
1.10 findNode(id) : 根据id找到相应的nodes数组中的对象
1.11 findNodeIndex(id) : 根据id找到相应的对象在nodes数组中的index
1.12 forgeNodes(arr) : 将不规范的arr数组规范话,以便使用addNodes添加到对应network中
1.13 neighboring(a,b) : 根据linkedByIndex字典加上两个节点的id,判断是否相邻
1.14 removeLink(sourceId,targetId) : obsolete??? 1.15 removeNode(id) : 删除相应的nodes数组中的node对象 1.15 removeNode_for_use(id) : obsolete??? -
历史记录模块:该模块的核心在于两个栈的使用,actionStack和redoStack,actionStack存储动作信息,redoStack存储需要恢复的信息,具体的关系见下图所示 2.1 addChildrenNodes(nodeRoot,expandType) :
2.2 addHistoryElement(nodeId,elementType,expandType) :为相应动作添加相应的dom元素
2.3 deleteHistoryElement(nodeId,flag) obsoleted
2.4 redoOperation(action) : 根据action对象恢复相应的动作
2.5 removeLatterHistory(this) : 根据当前的dom对象this,删除之后的历史记录对应的dom元素
2.6 retroOperation(action) : 根据相应action做逆向的动作(比如删除节点的逆向动作是恢复该节点 -
导入导出模块 : 该模块重点在于dom元素的各种操作: 3.1 addToSearchBackList(nodeList,openCallback) :
3.2 exportInfo(exportType) : 导出相应信息,根据exportType导出对应的domain,ip,或者email信息
3.3 hideSearchList() : 隐藏相应的导出列表
3.4 selectOrDisselect : 根据当前选定状态采取相应的动作,如果当前选中则取消选中,反之同理 -
其他结构 : pass
4.1 color : 颜色数组,改进的话可以用颜色比例尺
4.2 transferToNode(ob,nodeType) :
4.3 highlightNodeInRightTime(floor,ceiling): floor是时间下限,ceiling是时间上限,函数高亮在范围内的节点
4.4 saybye() : 删除弧形选项dom元素 -
推荐模块
5.1 相关技术:隐含语义分析技术