如何减少无谓的资源消耗?如何在仓库拓扑中进行 SOC 设计?

仓库中的每个存储单元、传输设施以及物品都与特定属性相关。这些属性被称为存储组织标准(Storage Organization Criteria , SOC)。这个标准定义了特定存储单元中,可以存储哪些类型的物品,或者特定传输设施可以传送哪些类型的物品。存储组织标准的例子还包括:吞吐量类、有害类以及温度类。

对每一个标准都有特定的、可枚举的允许值,如对吞吐量类来说有快速、中等和低速几种。

仓库管理流程控制系统中的领域功能使用这些信息来决定三个问题:

  • 要存放物品的目标位置是什么?
  • 从当前位置到目标位置的中间步骤有哪些?
  • 每一步骤用来传输物品的传输设施是什么?

例如,只存储一小段时间就快速取出的物品属于吞吐量类的快速类,这时应当将物品只存放在快速类的存储单元中。类似地,具有某种有害性质(如易燃性的物品),则应当由适合传输易燃   物的传输设施来传送。

某一特定存储单元、传输设施以及物品的存储组织标准通常很少随时间变化,除非是对仓库进行现代化改造。在正常的仓库运行中它们通常都是固定不变的,一旦确定了特定存储单元、传输设施或物品,则存储组织标准就只能由相应的管理功能来显式地调整。

如何减少无谓的资源消耗?

在仓库管理流程控制系统的具体安装中,维护这些数最庞大的存储组织标准就产生了一个问题。将每一个存储单元、传输设施和带有私有的相关存储组织标准集合的物品联系起来需要大量的内存,比如,有的仓库可能会有超过一百万个箱子。此外,因为许多仓库拓扑元件共享相同的存储组织标准,这会“浪费”很多内存。但是,为了确保仓库操作正确,又必须使得它们中的每一个都与一个良好定义的存储组织标准集合联系起来。

问题:怎样才能为仓库中的每个存储单元、传输设施以及物品提供相应的存储组织标准列表,而避免消耗巨大的内存呢?

对策:可以将存储组织标准采用恒值(Immutable Value)解决方案来实现,从而在仓库拓扑的多个元件之间共享。

解决方案:在多线程环境中共享和状态改变的问题会成倍的增加。因此,定义一个值对象,使其实例是不可改变的。值对象的内部状态是在创建时设定的,并且不允许后续改变,如下图示。

没有任何状态改变意味着不需要同步。这本身就决定了 Immutable Value 是线程安全的,而且因为没有加锁机制,也意味着它在多线程环境中的使用是高效的。

在仓库拓扑中 SOC 设计

在具体的仓库拓扑存储组织标准(Storage Organization Criteria ,SOC)设计中, 每个存储单元、传输设施和物品都维护着一份不变的存储组织标准集,这是在具体的仓库配置时指定的。在这个设计中这个集合由组合结构的根类(Storage 类)维护,如下图所示。

一个 Immutable Value 可以由不同的存储单元、传输设施以及物品共享,甚至多个控制线程也可以共享同一个 Immutable Value。此外, 仓库管理流程控制系统中的领域功能不允许修改Immutable Value,而只能通过相应的管理功能来显式改变。

时间: 2024-10-30 09:49:39

如何减少无谓的资源消耗?如何在仓库拓扑中进行 SOC 设计?的相关文章

高级系统架构师培训要点:减少资源消耗,靠虚拟代理方案解决了!

系统性能和吞吐量的需求决定了单纯在数据库中操作整个仓库拓扑数据是不现实的.这种大量的服务器端对象,会消耗大量的服务器内存和活动对象表的空间,如果这些对象使用得比较少,就很容易造成数据库服务端资源的浪费. 把仓库拓扑数据存放在本地内存中,形成内存数据对象(数据缓存),以便能高效地完成相应的操作,是一个解决办法. 但是,我们也要注意到在内存中保留仓库拓扑数据的完整副本也是不现实的,对于大的仓库来说,要维护整个拓扑数据所需要的内存会远远超过可用内存的大小,即使仓库拓扑分布在多台主机上也是一样的. 怎样

iOS构建流畅的交互界面--CPU,GPU资源消耗的原因和解决方案

 CPU资源消耗的原因和解决方案对象创建轻量对象代替重量对象* 不需要响应触摸事件的控件:CALayer显示* 对象不涉及UI操作,则尽量放到后台线程创建* 包含有CALayer的控件只能在主线程创建和操作* 通过Storyboard 创建视图对象时,其资源消耗会比直接通过代码创建对象要大非常多,在性能敏感的界面里,storyboard不是一个好的技术选择* 尽量推迟对象创建的时间,并把对象的创建分散到多个任务中去.* 对象的复用代价比释放,创建新对象要小,这类对象应当尽量放到一个缓存池里复用对

10gocm->session5->数据库管理实验->GC资源管理器资源消耗组演示

<GC资源管理器> 官方文档:administrator's Guide->24 Using the Database Resource Manager 使用率:在实际生产环境中使用的比较少 作用:限制数据库资源的使用,CPU  内存  undo表空间  IO  session 场合:当有多个应用使用一个数据库并且资源紧张时可用"资源管理器"调节 实现:可用GC完成也可用EM完成,还可以使用程序包完成 UI方式:简单,快捷,不容易出错 commend方式:设置复杂,命

oracle sql资源消耗相关视图

一.常用视图说明 Oracle sql语句资源消耗监控,最常用的系统视图有: v$sql v$sqlarea v$sqltext v$session v$sql和v$sqlarea基本相同,记录了共享SQL区(share pool)中SQL统计信息,如内存消耗.IO(物理磁盘读和逻辑内存读).排序操作.哈希ID等数据.不同之处在于v$sql为每一条SQL保留一个条目,而v$sqlarea中根据sql_text(需要注意,该处存储的为当前SQL指针的前1000个字符,也就是说这里记录的SQL可能是

10gocm-&amp;gt;session5-&amp;gt;数据库管理实验-&amp;gt;GC资源管理器的资源消耗组介绍

<GC资源管理器> 公文:administrator's Guide->24 Using the Database Resource Manager 用法:在实际生产环境中使用的少 行动:限制使用数据库资源.CPU    undo表空间  IO  session 场合:当有多个应用使用一个数据库而且资源紧张时可用"资源管理器"调节 实现:可用GC完毕也可用EM完毕.还能够使用程序包完毕 UI方式:简单,快捷,不easy出错 commend方式:设置复杂,命令非常长.失

数据库资源消耗高时两条简单管用、快速找出可能问题原因的SQL语句

1.  查看正在执行的SQL语句 (1)SQL语句: selectdistinct s.sid,s.sql_id,s.event,s.program,s.MACHINE,q.sql_textfrom v$session s,v$sql q where s.sql_id=q.sql_idand s.status='ACTIVE'order by sql_text: (2)用途说明: 当数据库服务器负载高时,资源绝大部分的可能是被正在运行的SQL所消耗,查询到正在执行的SQL语句,是打开高消耗原因盒

Kubernetes安全三步谈:如何监控与控制Kubernetes中的资源消耗问题

或许很多人可能认为资源消耗并非安全问题,但实际上不合理的资源消耗会让黑客有可乘之机,来攻击K8s的组件.本文将介绍如何处理资源消耗或noisy neighbor问题,包括如何管理Pods中的资源以及管理项目和资源配额等. 本文是关于Kubernetes安全系列三篇文章中的最后一篇.在第一篇文章中,我们分享了如何确保企业的Kubernetes集群免受外部攻击:第二篇文章介绍了三种保护Kubernetes免受内部威胁的方法.在本文中,我们将介绍如何处理资源消耗或noisy neighbor问题. 对

把EXE可执行文件等作为资源包含在Delphi编译文件中

摘自我自己过去写的一段心得. 1.编辑资源文件 *.RCWave: 资源文件是声音文件:RCDATA: 二进制数据AVI: AVI动画:ICON: 图标文件:BITMAP: 位图文件:CURSOR: 光标文件:比如:MyWav WAVE "FileName.Wav" 2.使用Brcc32转化为*.RES文件 3.在工程中引用RES文件比如:{$R MyRes.RES} 4.运行时读入    通过TResourceStream ,比如TResourceStream.Create(HIns

Android Studio如何查看资源或者函数在哪些类中被引用

许多人在做完Keymap匹配到Eclispe快捷键后,发现查看资源或者函数在哪些地方被引用的快捷键"Ctrl+Shift+G"不灵 了,你选中某个函数后,使用这个快捷键,发现只会光标跳到该类中引用这个函数的地方.原因是啥呢? 首先这里简单分析下,选择Keymap后IDE所做的工作及选择后发生快捷键失效原因,Android Studio设置KeyMap到 Eclipse,是进行了一个快捷键的映射操作,但是Android Studio本身的快捷键数量和Eclipse是不一样的,比如Andr