紧密关联的层次性数据处理程序设计

iNothing 2011-06-01 05:47:44
标题都不知道怎么写, 看来对问题本身我也是认识不足 :(

有如下这样一个系统:
核心名词: 事业部, 部门, 子部门, 车间等
关系: 层次型, 事业部下挂数个部门, 一个部门下挂几百个子部门, 一个子部门下挂几千个车间
操作: 简单地说就是CRUD, 创建修改删除查询, 大部分为创建和删除, 建删时主要有2件事情要做:
a) 资源分配, 比如建立子部门就从部门拥有的资源中分配一些给它(根据各种条件计算而得, 比如部门属性, 子部门属性, 设置所在事业部属性都会影响计算的结果), 没有资源创建操作就失败, 删除时则反操作
b) 建立实体, 假设就是做硬件设置, 比如某节点创建成功后调用驱动接口, 输入参数由前面的计算所得, 这个接口是个同步接口, 亦即调用会被block直到操作结束

这里有2个难题:
1. 由于各个节点操作互相引用, 导致数据结构上就有关联, 最后的结果就是代码显式或隐式得交织在一起, 造成维护困难
2. 由于数据都有关联, 导致无法从多核多线程上获得性能提升. 这里有两个同步点: 一是数据组织像是一颗树, 单独锁定一个节点没有意义, 所以要锁就把这个树都锁了, 比如部门有建删操作时, 所有子部门相关的操作都需等待; 二是硬件操作不能并发

各位有没有什么建议? 我觉得主要的问题可能还是在数据结构/代码体系上, 首先得能解决这个问题, 然后才能考虑怎样通过并发来提高性能
...全文
156 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
iNothing 2011-06-02
  • 打赏
  • 举报
回复
哈哈, 这个是个比喻而已, 我想也不会有这种浮云单位的

可能还是没把问题说清楚, 这个CRUD操作经常变动, 比如哪天新增了一个功能, 子部门改动时引起它所在部门同类型的其他部门重新计算一些资源分配, 后来有一个新需求, 子部门改动时和它的兄弟子部门也引起改动, 甚至导致相应的一堆硬件参数重设...

这样不断的改动, 导致了这颗数据树和千奇百怪的算法交织在一起, 形成了一个大泥团, 看着就累, 维护的人无不大喊郁闷, 这个是我想请教的地方, 如何改善它? 或者有没有相应的开源软件解决过类似的问题可供参考?

当然现在能工作, 只不过bug多点, 维护时痛苦点, 交差可以, 但这种挫败感...伤不起啊
科技完美生活 2011-06-01
  • 打赏
  • 举报
回复
层次型, 事业部下挂数个部门, 一个部门下挂几百个子部门, 一个子部门下挂几千个车间
这个会经常删建吗?这是神马单位啊
cxyOOOO 2011-06-01
  • 打赏
  • 举报
回复
1, srp?
本PDF电子书包含上下两册,共1576页,带目录,高清非扫描版本。 作者: 毛德操 胡希明 丛书名: Linux内核源代码情景分析 出版社:浙江大学出版社 目录 第1章 预备知识 1.1 Linux内核简介. 1.2 Intel X86 CPU系列的寻址方式 1.3 i386的页式内存管理机制 1.4 Linux内核源代码中的C语言代码 1.5 Linux内核源代码中的汇编语言代码 第2章 存储管理 2.1 Linux内存管理的基本框架 2.2 地址映射的全过程 2.3 几个重要的数据结构和函数 2.4 越界访问 2.5 用户堆栈的扩展 2.6 物理页面的使用和周转 2.7 物理页面的分配 2.8 页面的定期换出 2.9 页面的换入 2.10 内核缓冲区的管理 2.11 外部设备存储空间的地址映射 2.12 系统调用brk() 2.13 系统调用mmap() 第3章 中断、异常和系统调用 3.1 X86 CPU对中断的硬件支持 3.2 中断向量表IDT的初始化 3.3 中断请求队列的初始化 3.4 中断的响应和服务 3.5 软中断与Bottom Half 3.6 页面异常的进入和返回 3.7 时钟中断 3.8 系统调用 3.9 系统调用号与跳转表 第4章 进程与进程调度 4.1 进程四要素 4.2 进程三部曲:创建、执行与消亡 4.3 系统调用fork()、vfork()与clone() 4.4 系统调用execve() 4.5 系统调用exit()与wait4() 4.6 进程的调度与切换 4.7 强制性调度 4.8 系统调用nanosleep()和pause() 4.9 内核中的互斥操作 第5章 文件系统 5.1 概述 5.2 从路径名到目标节点 5.3 访问权限与文件安全性 5.4 文件系统的安装和拆卸 5.5 文件的打开与关闭 5.6 文件的写与读 5.7 其他文件操作 5.8 特殊文件系统/proc 第6章 传统的Unix进程间通信 6.1 概述 6.2 管道和系统调用pipe() 6.3 命名管道 6.4 信号 6.5 系统调用ptrace()和进程跟踪 6.6 报文传递 6.7 共享内存 6.8 信号量 第7章基于socket的进程间通信 7.1系统调用socket() 7.2函数sys—socket()——创建插口 7.3函数sys—bind()——指定插口地址 7.4函数sys—listen()——设定server插口 7.5函数sys—accept()——接受连接请求 7.6函数sys—connect()——请求连接 7.7报文的接收与发送 7.8插口的关闭 7.9其他 第8章设备驱动 8.1概述 8.2系统调用mknod() 8.3可安装模块 8.4PCI总线 8.5块设备的驱动 8.6字符设备驱动概述 8.7终端设备与汉字信息处理 8.8控制台的驱动 8.9通用串行外部总线USB 8.10系统调用select()以及异步输入/输出 8.11设备文件系统devfs 第9章多处理器SMP系统结构 9.1概述 9.2SMP结构中的互斥问题 9.3高速缓存与内存的一致性 9.4SMP结构中的中断机制 9.5SMP结构中的进程调度 9.6SMP系统的引导 第10章系统引导和初始化 10.1系统引导过程概述 10.2系统初始化(第一阶段) 10.3系统初始化(第二阶段) 10.4系统初始化(第三阶段) 10.5系统的关闭和重引导

33,028

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧