如何在整个组织内共享数据

2024-02-06

组织在多个部门和应用程序之间共享关键数据有哪些好方法?

举个例子,假设有一个主要应用程序和数据库来管理客户数据。组织中还有十个其他应用程序和数据库读取该数据并将其与自己的数据关联起来。目前,这种数据共享是通过数据库 (DB) 链接、物化视图、触发器、临时表、重新键入信息、Web 服务等的混合来完成的。

还有其他好的数据共享方法吗?并且,在以下问题方面,您的方法与上述方法相比如何:

  • 重复数据
  • 容易出错的数据同步过程
  • 紧耦合与松耦合(减少依赖性/脆弱性/测试协调)
  • 架构简化
  • 安全
  • 表现
  • 明确定义的接口
  • 其他相关问题?
  • 请记住,共享客户数据有多种使用方式,从简单的单记录查询到复杂的多谓词、多排序以及与存储在不同数据库中的其他组织数据的联接。

    感谢您的建议和忠告...


    我相信你已经看到了这一点,“这取决于情况”。

    这取决于一切。与部门 A 共享客户数据的解决方案可能与与部门 B 共享客户数据的解决方案完全不同。

    多年来我最喜欢的概念是“最终一致性”的概念。该术语来自亚马逊谈论分布式系统。

    前提是,虽然分布式企业中的数据状态现在可能不完全一致,但“最终”会是完全一致的。

    例如,当系统 A 上的客户记录更新时,系统 B 的客户数据现在已过时且不匹配。但是,“最终”,来自 A 的记录将通过某种过程发送到 B。因此,最终,两个实例将匹配。

    当您使用单个系统时,您没有“EC”,而是具有即时更新、单个“事实来源”,以及通常处理竞争条件和冲突的锁定机制。

    您的操作处理“EC”数据的能力越强,分离这些系统就越容易。一个简单的例子是销售使用的数据仓库。他们使用 DW 运行每日报告,但直到凌晨才运行报告,并且总是查看“昨天”(或更早)的数据。因此数据仓库并不需要实时与日常运营系统完全一致。流程在营业时间结束时运行并在大型单一更新操作中集中移动这些天的事务和活动是完全可以接受的。

    你可以看到这个需求如何解决很多问题。事务数据不存在争用,不用担心某些报告数据会在累积统计数据的过程中发生变化,因为报告对实时数据库进行了两次单独的查询。白天不需要因为高细节的喋喋不休而占用网络和CPU处理等。

    这是 EC 的一个极端的、简化的、非常粗略的例子。

    但考虑一下像谷歌这样的大型系统。作为搜索的消费者,我们不知道谷歌收集的搜索结果何时或需要多长时间才能出现在搜索页面上。 1毫秒? 1秒? 10秒? 10小时?很容易想象,如果您访问谷歌的西海岸服务器,您很可能会得到与访问其东海岸服务器不同的搜索结果。这两个实例在任何时候都不完全一致。但从很大程度上来说,它们大多是一致的。对于他们的用例来说,他们的消费者并没有真正受到滞后和延迟的影响。

    考虑电子邮件。 A 想要向 B 发送消息,但在此过程中,消息要经过系统 C、D 和 E。每个系统都接受该消息,并对其承担全部责任,然后将其交给另一个系统。发件人看到电子邮件正在发送。接收者并不会真正错过它,因为他们不一定知道它的到来。因此,该消息在系统中传输需要很长的时间,而没有人知道或关心它的速度有多快。

    另一方面,A可能正在和B通电话。“我刚刚发了,你收到了吗?现在?现在?现在收到吗?”

    因此,存在某种潜在的、隐含的绩效和响应水平。最后,“最终”,A 的发件箱与 B 的收件箱匹配。

    这些延迟、对陈旧数据的接受(无论是一天前的数据还是 1-5 秒前的数据)是控制系统最终耦合的因素。此要求越宽松,耦合就越松散,您在设计方面的灵活性就越大。

    对于 CPU 的核心来说也是如此。在同一系统上运行的现代多核、多线程应用程序可以对“相同”数据有不同的视图,仅过时微秒。如果您的代码可以正确处理可能彼此不一致的数据,那么快乐的一天,它就会顺利进行。如果不是,您需要特别注意确保数据完全一致,使用易失性内存限定或锁定结构等技术。所有这些都以它们的方式降低了性能。

    所以,这是基本的考虑。所有其他决定都从这里开始。回答这个问题可以告诉您如何跨机器对应用程序进行分区、共享哪些资源以及如何共享它们。有哪些协议和技术可用于移动数据,以及执行传输的处理成本是多少。复制、负载均衡、数据共享等等都是基于这个概念。

    编辑,回应第一条评论。

    正确,完全正确。这里的博弈,例如,如果B不能改变客户数据,那么改变客户数据有什么危害呢?你能“冒”它在短时间内过时的风险吗?也许您的客户数据输入速度足够慢,您可以立即将其从 A 复制到 B。假设零钱被放在一个队列中,由于交易量小,很容易被提取(

    现在头脑真的开始旋转了。在那一秒的“滞后”期间会发生什么,最糟糕的情况是什么。你能围绕它进行设计吗?如果您可以设计 1 秒左右的延迟,那么您也许可以设计 5 秒、1 米甚至更长的延迟。您在 B 上实际使用了多少客户数据?也许B是一个旨在促进库存订单拣选的系统。很难想象还有什么比简单的客户 ID 和名称更重要的了。只是在组装订单时粗略地识别订单的对象。

    拣货系统不一定需要在拣货过程结束之前打印出所有客户信息,到那时订单可能已经转移到另一个可能更最新的系统,尤其是运输信息,因此最终,拣货系统几乎不需要任何客户数据。事实上,您可以在提货订单中嵌入和非规范化客户信息,因此不需要或期望稍后进行同步。只要客户 ID 正确(无论如何都不会改变)和名称(很少改变,不值得讨论),这就是您需要的唯一真实参考,并且您的所有提货单在当时都完全准确创建。

    诀窍在于心态,即打破系统并专注于任务所需的基本数据。您不需要的数据不需要复制或同步。人们对非规范化和数据缩减之类的事情感到恼火,尤其是当他们来自关系数据建模领域时。并且有充分的理由,应该谨慎考虑。但一旦你采用分布式,你就隐式地非规范化了。哎呀,你现在正在批量复制它。所以,你最好在这方面变得更聪明。

    所有这些都可以通过可靠的程序和对工作流程的透彻理解来缓解。识别风险并制定处理风险的政策和程序。

    但困难的部分是从一开始就打破中央数据库的链条,并告诉人们,当你拥有一个单一的、中央的、完美的信息存储时,他们不能像他们所期望的那样“拥有一切”。

    本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

    如何在整个组织内共享数据 的相关文章

    • Oracle中如何检测4字节UTF8字符

      我们已经看到oracle中存储了4字节的UTF 8字符 我们需要检测特定列中有多少行包含此类字符 尝试了这里给出的建议 UTF 16 补充字符 https stackoverflow com questions 34720830 how t
    • 如何处理用户界面中的数据库约束违规?

      我们使用存储过程在数据库中实现大部分业务规则 我永远无法决定如何最好地将数据约束违规错误从数据库传递回用户界面 我所说的约束更多地与业务规则相关 而不是与数据完整性相关 例如 诸如 无法插入重复的键行 之类的数据库错误与业务规则 不能有多个
    • 使用 to_char 格式化间隔

      以下 SQL 命令 select TO CHAR NVL arg1 arg2 TO DSINTERVAL 0 00 00 00 from table1 生成格式为 000000000 00 03 01 954000 的结果 是否可以在 to
    • PostgreSQL 中字符串列类型的索引数组

      是否可以在类型为的列上创建索引文本数组 尝试使用GIN索引 但查询似乎没有使用这些索引 Example CREATE TABLE users name VARCHAR 100 groups TEXT Query SELECT name FR
    • 递归 SQL 给出 ORA-01790

      使用 Oracle 11g 第 2 版 以下查询给出 ORA 01790 表达式必须与相应表达式具有相同的数据类型 with intervals time interval AS select trunc systimestamp from
    • 授予用户在查询时使用表索引的什么?

      我想知道当用户从表中查询数据并且该用户已被授予以下权限时 oracle 是否使用索引 grant select on table to user 我想知道是否需要其他拨款才能使用索引 不 没有要求 或能力 授予对索引的访问权限 如果用户可以
    • Oracle 9i:同义词表不存在?

      我创建了一个包 其中包含一个存储过程 我计划从单独的应用程序调用该存储过程 存储过程将返回架构中所有视图和表的排序列表 为此 它对 DBA TABLES 和 DBA VIEWS 同义词执行简单的选择 如下所示 CREATE OR REPLA
    • 如何在 Delphi DBLookupComboBox 中选择正确的项目

      我有一个数据库查找组合框连接到数据库查询 那部分工作正常 当我运行程序时数据库查找组合框填充有查询的结果 我想看看数据库查找组合框填充第一项 请选择 当 的时候程序第一次运行或者当一个新项目行动已启动 见下图 另外 如果我正在加载以前保存的
    • 获取对 SOAP 的 XML 响应中的节点值

      我在 PowerShell 中发出 SOAP 请求 如下所示 uri https secure echosign com services EchoSignDocumentService20 WSDL sun Invoke WebReque
    • TOAD 将 &String 视为绑定变量

      我正在使用 Oracle Data Integrator 开发一些 ETL 有时会使用 TOAD 测试部分代码 今天我遇到了 TOAD 的问题 我有一行像 AND column value like DEV PROD 当我尝试运行包含上面过
    • 替换 Oracle 包的一部分

      我需要修改包内的一个过程 我需要接触声明和实施 由于我正在维护每次修改的补丁文件 因此我希望更改最小化 我可以仅使用更改的过程更新包 如果是 如何更新 还是需要提供完整的包定义和实现 您需要替换整个包规范和主体 您不能仅对包的一部分进行操作
    • Sequelize.js - “不关联到”

      我在从数据库获取完整数据时遇到一些问题 那是我的模型 User module exports function sequelize DataTypes return sequelize define user id type DataTyp
    • Neo4j Desktop DB 无法启动,状态为“KILLED”

      运行 Neo4j Desktop 版本 1 0 15 尝试启动DB导致启动失败 数据库启动失败 DB database f8950fdd 6b5f 4fea 8c9f e8457ee1da9a v3 3 1 退出 状态为 已杀 检查日志 主
    • 使用Powershell访问远程Oracle数据库

      我需要能够连接到我的网络上基于 Windows 7 的 Oracle 服务器 32 位 Oracle XE 我需要连接的机器运行 Windows 7 64 位 两台机器上都安装了 Powershell 我已在 64 位计算机上安装了 Ora
    • 如何在 Hibernate 中自动递增复合主键中的 Id?

      我有一个带有复合主键的表 groupId and batchId 实体类看起来像 Entity name EMPLOYEE public class Employee EmbeddedId private EmployeePK employ
    • 数据库分片和 Rails

      在 Rails 中处理分片数据库的最佳方法是什么 分片应该在应用层 活动记录层 数据库驱动层 代理层还是其他层处理 各自的优点和缺点是什么 FiveRuns 有一个名为的 gem数据结构 https github com bpot data
    • Oracle:使用SQL或PL/SQL查找动态SQL中的错误位置

      如何在 PL SQL 或 SQL 中找到动态 SQL 语句中的错误位置 从 SQL Plus 中 我看到了错误的位置 例如 无效的 SQL DML 语句 SYS orcl gt SELECT 2 X 3 FROM 4 TABLEX 5 TA
    • 如何在列上创建外键,该列的每条记录都可能引用多个表之一中的列?

      我正在创建一个社交网络 它有新闻 照片等多个实体 可以有评论 由于所有评论都具有相同的列并且行为方式相同 唯一的区别是它们的类型 新闻 照片或将来添加的其他内容 我决定为所有评论创建一个表 其中的列名为type 它工作得很好 直到我决定将外
    • 在 SQL 数据库中存储“列表”的最正确方法是什么?

      因此 我读了很多关于如何将多个值存储到一个列中是一个坏主意 并且违反了数据标准化的第一条规则 令人惊讶的是 这不是 不要谈论数据标准化 所以我需要一些帮助 目前我正在为我工 作的地方设计一个 ASP NET 网页 我想根据此人所属的 Act
    • Oracle查询结果分页无TABLE FULL SCAN数据访问方式

      stackoverflow 上有很多关于如何正确执行分页的问题 对于 Oracle 来说 最流行的答案是这样的 select from select row rownum rownum from select from some table

    随机推荐

    • Windows Phone 7 Silverlight MVVM(和其他)框架

      目前 WP7 有哪些可用的 mvvm 框架 您会推荐哪一个 为什么 在开始 WP7 silverlight 开发时是否应该考虑其他有用的框架 感谢您发布迄今为止的经历 干杯 菲尔 看看这个MVVM框架比较 http www japf fr
    • 如何将信息传递给React中的嵌套组件?

      说我有
    • 如何使用 VBA 在 Excel 文档中循环浏览超链接

      我有一份大约的清单 Excel 中的一列中有 160 个超链接 我正在尝试从每个单独的链接中提取数据 为了导航到特定页面 例如https www oddschecker com golf canadian open winner bet h
    • 在 xamarin 表单上预加载页面

      我正在寻找让我的 Xamarin Forms 应用程序更快的技巧 我遇到了这个article https newbedev com slow startup of xamarin app 好吧 我已经尝试了一些选项 但我发现很难实现最后一个
    • 在 Node.js 中的 mongoose 用户上使用 _.omit

      我有一个像这样构建的猫鼬用户模式 var UserSchema new Schema username type String required true index unique true password type String req
    • 并行化 std::nth_element 和 std::partition

      我正在移植使用的 C 代码std nth element and std partition到 OpenCL nth element http www cplusplus com reference algorithm nth elemen
    • .NET 如何以及何时实际编译代码?

      假设您使用 C VB 或任何 NET 编写应用程序 当你点击构建时 它真的会编译你的代码吗 我是这么认为的 直到我开始在我的一些程序集上使用 redgates 反射器并逐字查看我的代码 我本来期望展开循环并进行大量优化 但什么也没有 那么编
    • 无法在 iPhone 应用程序中通过 Oauth 2.0 获取 google+ 的访问令牌

      我正在尝试在 iPhone 应用程序中使用 Oauth 2 0 访问 Google API 为此 我使用 OauthConsumer 库 我获得了未经授权的 request token 和授权码 但无法使用授权码将该 request tok
    • 我怎样才能取消 Future.delayed 函数调用

      我怎样才能取消 Future delayed 我正在使用 Future delayed 来执行某些任务 但是如果我想取消这个延迟的任务 那么他们的任何方法或任何其他要使用的东西也是如此 Future delayed Duration sec
    • 将密钥和 SSL 证书导入 java 密钥库

      我有 pem 格式的证书文件和私钥文件 是否可以使用 Java 代码和 JDK 附带的默认库 而不是第三方库 将这些文件加载 到 Java 密钥库中 当我尝试谷歌搜索时 我只能找到 der 格式的文件以使用 java 代码导入到 java
    • Python 异常传播

      我正在构建一个工具 当异常向上传播时 有关异常上下文的新数据将添加到异常中 问题是 当异常到达顶层时 所有额外的上下文数据都在那里 但只显示最新的堆栈跟踪 有没有一种简单的方法可以让异常显示抛出异常的原始堆栈跟踪而不是最后一个堆栈跟踪 或者
    • 无法在导入请求时从“集合”导入名称“映射”[重复]

      这个问题在这里已经有答案了 Python版本 Python 3 10 4 画中画版本 pip 22 0 4 所以我试图用套接字制作一个小项目 我添加了一个上传文件的功能 但是每当我导入请求时 它都会抛出此错误 下面是我运行的代码 Trace
    • USB 控制传输能否保证交付?

      USB 2 0 指定 http www usb org developers docs usb20 docs 4 种传输类型 第 5 4 节传输类型 控制转移 同步传输 中断传输 批量转账 第 5 8 节规定批量转账提供 在带宽可用的基础上
    • 如何将数据从一种表单发送到另一个类的函数

      我知道如何将数据从一种表单传递到另一种表单 但如何将数据从一种表单传递到类 这是我想要传递的数据form1上课问题 string GrpID somevalue string DurationID somevalue 我搜索过但没有得到确切
    • Android java 设置图像资源

      我对此有很大的了解 if num1 getText equals 0 num1 setText 1 ImageView hpdown1 ImageView findViewById R id hair hpdown1 setImageRes
    • 通过代码使用 NHibernate 映射:当 IDENTITY_INSERT 设置为 OFF 时,无法在表“DietUser”中插入标识列的显式值

      我花了一段时间才找到这个问题的答案 所以我想分享这份爱 当通过 SQL Server 代码使用 NHibernate 的新映射时 我无法保存实体 保存实体时 会引发 System Data SqlClient SqlException 并显
    • 我们应该在 C++ 中使用 exit 吗?

      根据C 参考 exit正常终止进程 执行常规清理 用于终止程序 正常的程序终止执行以下操作 以相同的顺序 与当前线程关联并具有线程存储的对象 持续时间被破坏 仅限 C 11 具有静态存储的对象 持续时间被破坏 C 并且使用 atexit 注
    • 如何更改 pine 脚本中函数的全局变量?

      我正在尝试编写一个脚本来获得 9 个级别的江恩平方 我已经用其他语言完成了它 但无法理解此处的 pine 脚本 它说无法修改函数中的全局变量 有什么解决方案可以获取这里的值是我的脚本 version 4 study title Volume
    • Xcode 5.1 破坏了一些测试

      自从更新到 Xcode 5 1 以来 我在尝试运行单元测试 XCTestSuite 时遇到了错误 当我运行单独的测试方法时 出现错误Error while reading test scope bundle在控制台上没有结果 当我运行测试文
    • 如何在整个组织内共享数据

      组织在多个部门和应用程序之间共享关键数据有哪些好方法 举个例子 假设有一个主要应用程序和数据库来管理客户数据 组织中还有十个其他应用程序和数据库读取该数据并将其与自己的数据关联起来 目前 这种数据共享是通过数据库 DB 链接 物化视图 触发