应用数据库将代替共享数据库

Berkeley db 数据库 简介 它是由sleepcat开发,后被oracle收购,并提升了它在数据库行业中的知名度。 Berkeley DB (DB)是一个高性能的,嵌入数据库编程库,和C语言,C++,Java,Perl,Python,PHP,Tcl以及其他很多语言都有绑定。Berkeley DB可以保存任意类型的键/值对,而且可以为一个键保存多个数据。Berkeley DB可以支持数千的并发线程同时操作数据库,支 阅读详情

系统中的数据远比构成系统的应用程序本身更有价值,这似乎有点老生常谈。应用程序会更新、变革、失效和替换,但数据仍然存在。对许多组织来说,这些数据是他们最重要的资产。过去很简单,你有组织的数据库,只有一个地方存放着组织的所有信息,从这里可以获取所有想要的内容。一个用于管理、监控、优化、备份等的数据库—负责承接整个组织的数据需求。

随着组织的发展,数据不断增长,因而越来越多的需求被添加到数据库中。在某一时刻,就会触及极限。使用单一数据库的做法已经力不从心,必须将系统和数据库分解为独立的组件。在本文中,将讨论如何管理数据范围和大小的增长。

1.共享数据库的消亡,为什么不能使用更大的机器

虽然并不常见,但目前有数十亿条记录达到万亿字节范围的数据库并不少见。那么有什么问题呢?问题不在于特定数据库引擎的技术限制。而是组织将所有东西放入单个数据库。例如,在我工作过的一家公司,数据库中有超过30,000多张表,视图和存储过程的数量更多,这还没说触发器的数量。

没有哪个数据库工具能够处理如此数量的表。GUI工具每次连接数据库时总会导致该工具卡顿几分钟,同时它会在短时间内读取模式描述。没有人清楚数据库内部发生了什么,但是数据和围绕它的流程对组织的成功至关重要。最后的结果:要么停滞不前,要么开始将数据库分成可管理的组成部分。

那是多年前的事了,行业格局已经发生了改变。今天,当我们考虑数据时,有更多问题需要考虑,例如:

属于欧洲公民的个人数据,这意味着与他们相关的任何数据也必须实际存储于欧盟,并受GDPR规则的约束。
医疗保健信息(直接或间接),需要遵循一套全新的规则(例如,HIPAA、HITECH或ENISA规则)。
数据隐私和出处等问题更为重要,比如能够审计和分析谁访问了某个特定数据项,以及为什么它在许多领域都是一个硬性要求。组织中的所有信息都驻留在一个存储桶中的概念已不再可行。

另一个重要的巨变是常见的架构模式。我们现在不再使用单一的庞大系统来管理组织中的一切内容,而是将系统分解成更小的组件。这些组件有不同的需要和需求,按不同的时间表发布,使用不同的技术。当你想更改自己的系统时,尝试在所有这些团队之间进行协调的巨大开销是你想要在系统中进行更改的一个大障碍。跨这么多团队和组件进行协调的成本太高了。

通常的想法是使用独立应用程序数据库,而非单个共享数据库。这是一个更大的架构概念的重要组成部分。通常会在微服务和面向服务的体系结构中碰到这种情况。

2.应用程序数据库作为实现决策

从单个共享数据库迁移到一组应用程序数据库之间一个最重要的区别是没有拆分共享数据库。数据库级别的适当分离是关键。一组共享数据库也会有完全相同的协调问题,因为厨房里有太多的厨师。应用程序数据库被正确地分离,就能够为每个任务选择最佳的数据库引擎,本地化更改,减少沟通更改的开销。这种方法的缺点是在生产中要支持更多系统。

我们来更深入地讨论下共享数据库与应用程序数据库之间的区别。很容易弄错,例如图1所示:
在这里插入图片描述 图1:从单个共享数据库到多个(仍然共享)数据库的错误迁移路径

虽然共享数据库是你实现的,因为没有其他选择,但应用程序数据库是内部选择,除了应用程序没有人能访问。与面向对象编程的封装有相同的含义,使用私有变量隐藏状态,非常确定的是,应用程序数据库是应用程序之外任何事物都不必关心的问题。我对此深有同感。

编写代码时,直接使用其他对象的私有状态是错误的。如果违反了不变性,未来的维护和开发都会变复杂。这已经被大量事实敲定,因此大多数开发人员几乎本能地不会这么做。直接访问另一个应用程序的数据库也会发生完全相同的状况,但却非常常见。

在某些情况下,我对数据库中所有表和列的名称进行了加密,以表明你不应该查看我的数据库。应用程序数据库应该仅仅是应用程序的内部关注点。这个想法很简单。如果应用程序之外的任何实体需要一些数据,则需要向应用程序请求。他们不应该直接进入应用程序数据库获取。这是询问“你在和谁说话”与查看他们所有的交流记录及留言之间的区别。理论上,这是一个好方法,但是需要考虑到,你的应用程序不仅是系统的应用程序,还必须与生态系统的其他部分集成。问题是你如何做到这一点。

如果这里描述的系统听起来很熟悉,那是因为你可能以前听说过。它最初是DCOM/COBRA系统的一部分,后来被称为面向服务的体系架构,现在被称为微服务。

假设在我们的系统中处理发货的应用程序需要访问一些客户数据来完成其任务。如何获得这些数据?使用共享数据库时,直接查询客户表。当负责客户应用程序的团队需要添加列或重构数据时,你的系统就会遭到破坏。它们之间没有封装或分离。直接依赖另一个团队的实现细节的方式会导致破坏、停滞和不断增加的复杂性。

3.使用全局数据

或者,发货应用程序可以(通过已发布的服务接口)请求拥有客户数据的应用程序以获取所需的详细信息。这通常是通过从一个应用程序到另一个应用程序的RCP调用来完成。问题是,如此一来就在两个应用程序之间建立了牢固的联系。如果客户的应用程序因维护而停机,则运输应用程序将无法工作。再加上几十个这样的应用程序及其相互依赖关系,你就有可能陷入僵局。我们需要考虑一种更好的方法来处理这种情况。

我的建议是从另一个方向着手整个过程。发货应用程序不必查询客户应用程序的相关数据,而是进行相反的操作。作为客户应用程序服务接口的一部分,完全可以决定要向组织的其他部分公开什么样的信息。

需要注意的是,发布的数据绝对是服务契约的一部分。不提供对数据库的直接访问。应用程序应该向外界发布其数据。可以是上传到FTP站点或GraphQL端点的每日CSV文件,以选择两种截然不同的技术和语义。

我在FTP上包含了CSV,以特别表明数据共享的方式是无关紧要的。重要的是,有一种从应用程序发布数据的既定方式,因为这种架构风格的一个关键方面是不必在需要的时候查询数据。相反,我们将其摄取到自己的系统中。我想很明显,为什么发货应用程序不会打开一个FTP连接到客户的每日CSV转储文件以查找详细信息。同样的,它也不应该将查询GraphQL端点作为其常规例程的一部分。

相反,我们有一个既定的机制,通过该机制发布客户的数据(客户应用程序已向组织的其他部分公开)。这由系统中的其它应用程序摄取,当他们需要查询客户的详细信息时,可以从自己的系统中进行查询。如图2所示:
在这里插入图片描述图2:客户应用程序发布数据以供运输应用程序使用

在每个应用程序中,数据可以以不同的方式存储和表示。在每种情况下,都是最适合他们的。

发布应用程序还可以以他们选择的任何方式处理数据。数据库和数据发布方式之间的服务边界允许自由修改内部细节,而无需与外部系统协调。

另一个选择是采用两阶段的流程,如图3所示。客户应用程序不必将其更新发送给发货应用程序,而是将其发送到组织数据湖。通过这种方式,每个应用程序将希望公开的数据发送到一个中心位置。其他应用程序可以将需要的数据从数据湖复制到自己的数据库中。
在这里插入图片描述图3:每个应用程序发布数据到数据湖并拉取数据到各应用程序

最终结果是一个共享数据的系统,但是没有应用程序和服务之间的时间依赖关系。它还确保了不同团队和系统之间的边界。只要发布的接口保持不变,就不需要协调增加复杂性。

4.实践中的几个建议

我们深入探讨关于如何应用这种体系架构方法的一些具体建议。可以通过在服务总线上发出事件或发布每日文件来全局发布数据。可以发布特定场景的数据,例如从客户数据库到发货数据库的ETL流程。只要有适当的边界,局部的方法的改变将对整体的影响度很低。

这种操作方式只在需要引用数据或对与一致性无关的数据做出决策时有效。如果需要对数据进行更改或协调更改,则此方法不适用。一致性无关紧要的一个很好的例子就是根据客户的ID查找他们的名字,如果我们有旧名字,那不是什么大问题。很快就会自行修复,我们不会根据客户的名字来做决定。同时,我们可以在应用程序范围内完全本地运行所有的计算和任务,这是一个很大的优势。

当我们需要做出决定或修改数据时,一致性很重要。例如,在发货场景中,如果要收取超重费,需要确保客户账户中有足够的资金。在这种情况下,我们并不拥有账户中的资金,不能对自己的数据进行操作。如此一来,需要向客户发起应用程序申请,要求扣除这些资金,如果资金不足,则报告错误。注意,如果客户无法付款,更合理的结果应该是:发货操作失败。

应用程序不应该再部署到单个服务器甚至单个数据中心。如今,在边缘系统上运行应用程序(如移动应用程序或物联网设备)已经非常常见。将所有这些数据推送到自己的系统中可能会导致存储不可承受的巨量数据。数据封装和仅公开希望公开的细节这种架构风格在这个场景中发挥得非常好。

无需将所有信息复制到中心位置,而是将数据存储在边缘,并从边缘设备接收足够的数据,以便能够做出决策并操作系统的全局状态。除其他优点外,这种方法让用户可以掌控他们所有的数据,我认为这是一个主要的优点。

5.写在最后

在架构中使用应用程序数据库和显式数据发布有几个原因。首先,它意味着操作是以本地资源和最少的协调运行的。反过来,意味着这些操作更快、更可靠。其次,它减少了整个系统的协调开销,这表明可以根据需要独立部署和更改每个应用程序。

最后,它意味着可以独立地为每个场景选择最佳选项。可以为每个选项选择最好的品种,而不是迎合最低公分母。例如,可以使用文档数据库来存储发货清单,而将历史数据放入数据湖中。

每个应用程序都是独立的,彼此隔离,可以为每个场景做出最佳的技术选择,而不必考虑任何全局约束。其结果是一个更易修改的系统,由更小的组件组成,并且更加敏捷。

第25节 典型应用集成技术 第25节 典型应用集成技术 典型应用集成技术 1[单项选择题]共享数据库是一种重要的企业应用集成方式。以下关于共享数据库集成方式的叙述中,错误的是___( )___。 A共享数据库集成方式通常将应用程序的数据存储在一个共享数据库中,通过制定统一的数据库模式来处理不同应用的集成需求 B共享数据库为不同的应用程序提供了统一的数据存储与格式定义,能够解决不同应用程序中数据语义不一致的问题 C多个应用程... 阅读详情

相关推荐

游戏开发实战:如何在Unity中实现六边形网格地图(附完整代码)

本文详细介绍了在Unity中实现六边形网格地图的完整开发流程,从数学原理到实战代码。涵盖三种主流坐标系转换方法、距离计算算法对比、网格生成与渲染技巧,以及高级功能如网格高亮、寻路算法和性能优化策略。适合策略游戏、战棋类游戏开发者提升地图系统开发效率。

656

Redis实战--黑马点评

SETNX是实现分布式锁的基础命令,通过它可以实现原子性操作来控制锁的获取。确保设置锁的有效期,防止死锁。使用UUID确保锁值的唯一性,防止误释放锁。分布式锁–redisson中:Redisson提供了.分布式锁的多种多样功能可重入锁(Reentrant Lock)公平锁(Fair Lock)…

juli_eyre的博客 1291

stm32最小系统_完成一个最小FOC矢量控制系统所需的基本模块和功能配置

当我们读懂 FOC 矢量控制的基本原理之后,便迫不及待的想动手尝试,去实现一个矢量控制系统,让电机先转起来,有一个直观的感受。因此,我们需要设计实现一个矢量控制的最小系统,具备矢量控制的基本功能,满足电机矢量运行的基本条件。首先,看一下矢量控制的基本架构:矢量控制架构如上图所描述,矢量控制系统包括实时电流的采集、clarke 变换、park 变换、SVPWM 、实时角度的反馈和计算以及电流环和速...

weixin_39524048的博客 1784

第一章: Instance (实例)和DB(数据库)

A,Oracle 网络架构及应用环境。 B. Oracle 体系架构 1)Oracle Sever : database + instance 2) Database : data file,control file, redolog file 3) instance: an instance access a database 4) Oracle memory : SGA ...

u011868279的博客 3197

VSCode上搭建C/C++开发环境(vscode配置c/c++环境)Windows系统---保姆级教程

关于VSCode上搭建C/C++开发环境的内容,到这里就结束了,这里博主感叹一下,VSCode真的挺强大的,作为一个编辑器,可以通过和编译器链接成为开发环境,将环境配置好的话,在这上面写代码似乎也是个不错的选择。大家有任何疑问,欢迎在评论区中提出,本篇博客有任何问题和错误也欢迎来和博主讨论,真心希望能和大家一起进步。最后,如果本篇博客对你有帮助的话,能不能给博主一个三连啊!

2303_79329831的博客 8万+

Test-Time Adaptation Induces Stronger Accuracy and Agreement-on-the-Line

TTA不管是否提高了OOD的泛化性都增强了线性的趋势,TTA的初始目的是为了增强OOD的表现,一个人可能会觉得TTA使得ACL更强的原因是他消除了ID和OOD之间的差距,因此所有模型间ID vs OOD的准确率接近于y=x这条线,但是实际上这个解释不能够反映我们的经验发现,因为虽然TTA将分布之间的偏移简化为一种放缩的分布,但是这个放缩的因子幅值可能很大,也就是α<<1但是r>>1,这就会导致很偏离y=x这条线,而且理论分析也是,虽然ID和OOD的差距很大,但是线性关系还在。

m0_62673638的博客 149

【数据仓库与OLAP技术】期末复习+考题

疫情期间在家上网课,本人没好好听课,实在汗颜。期末考试也和以往不同了,所以以下题目及答案仅供参考。 1、请回顾自己的网课状况,回答如下问题:①是否每次都上课了?②是否每次都参与答题了?③是否有迟到、早退发生?④平均上课时间大概有多少?⑤认真听课时间平均大概有多少?⑥老师的授课内容,大概能理解和记住多少? ①是;②是;③否;④1h30min;⑤1h 30min;⑥80%(然并没有) ...

鸽子的博客 1832

1.5 RAG技术栈全景图:LangChain vs LlamaIndex深度对比,选错框架后悔3年,一文帮你选对

摘要:LangChain与LlamaIndex框架深度对比 本文全面对比了RAG领域两大主流框架LangChain和LlamaIndex。LangChain是通用AI应用框架,具有模块化设计和丰富生态;LlamaIndex专为RAG优化,提供开箱即用解决方案。功能对比显示,LangChain在文档加载和Agent支持方面更强,而LlamaIndex在检索策略、向量存储和多模态处理上表现更优。代码示例展示了二者实现RAG的不同方式:LangChain需要更多配置但灵活性高,LlamaIndex则提供更简洁的A

yonggeit的博客 3241

何为主数据管理?主数据管理系统能代替数据中台吗?

主数据是企业内跨系统、跨业务共享的核心数据,比如客户、产品、供应商、组织、物料等 —— 这些数据是企业业务运转的 “底层基石”,需要长期稳定、标准一致。而主数据管理(MDM),则是通过标准定义、流程管控、工具支撑,实现主数据统一、准确、共享的管理体系,解决数据孤岛、标准不一、质量低下的核心问题。为什么主数据管理是企业数字化转型的必选项?业务需要标准数据:如果客户、物料等主数据没有统一格式,会导致同一客户在销售系统叫张三,在财务系统叫张某某的混乱,反向修正的成本极高;

esensoft123的博客 1101

点云数据处理:体素滤波算法

体素滤波是一种简单而有效的点云数据处理方法,可用于去除离群点和平滑点云表面。体素滤波是一种常用的点云数据处理算法,用于去除离群点并平滑点云表面。在本文中,我们将介绍CloudCompare和PCL(Point Cloud Library)中的体素滤波算法,并提供相应的源代码示例。PCL是一个专门用于点云处理的开源库,提供了一系列高效的点云处理算法和工具。然后,我们创建了一个。方法执行体素滤波,并将滤波后的点云保存为"filtered_cloud.ply"文件。方法来执行体素滤波,指定体素大小为0.01。

ZyqfCss的博客 390

occ算法真值构建

occ算法真值产生

xiaomu_347的博客 611

BDB (Berkeley DB)数据库简介(转载)

最近要使用DBD,于是搜了下相关的资料,先贴个科普性的吧:转自http://www.javaeye.com/topic/202990 DB综述DB最初开发的目的是以新的HASH访问算法来代替旧的hsearch函数和大量的dbm实现(如AT&T的dbm,Berkeley的ndbm,GNU项目的gdbm),DB的第一个发行版在1991年出现,当时还包含了B+树数据访问算法。在1992年

岁月留痕 2万+

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

从数据安全治理角度梳理数据库、数据仓库、数据湖、数据平台、数据中台之间的区别和关系

数据中台和数据平台都可以视为一个大型的业务系统,在数据安全治理中可以详细梳理组成业务系统的各个模块之间的数据流动安全,因不同企业的数据中台和数据平台都会有所不同,只需要前期了解其基础架构,在梳理过程中再不断加深对数据中台和数据平台的理解。随着企业业务的不断扩大,业务流动和交互需求激增,API接口、库表交换等多种数据共享方式混合使用,数据类型和数据结构各有各的特点,为了规范数据使用流程提升数据质量,搭建以数据集中、数据治理、数据服务为中心的数据中台,统一对外执行数据服务。

锦慈的技术博客 2616

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

数据库(Database)介绍

什么是数据库? 数据库,简而言之可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据运行新增、截取、更新、删除等操作。 所谓“数据库”系以一定方式储存在一起、能予多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合。 什么是数据库管理系统? 数据库管理系统(英语:Database Management System,简称DBMS)是为管理数据库而设计的电脑软件系统,一般具有存储、截取、安全保障、备份等基础功能。数据库管理系统可以依据...

shunchang的专栏 3347

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

嵌入式数据库系统Berkeley DB

施聪 (javer@163.com), 高级程序员、网络设计师2005 年 4 月 01 日Berkeley DB是历史悠久的嵌入式数据库系统,主要应用在UNIX/LINUX操作系统上,其设计思想是简单、小巧、可靠、高性能。本文是对DB开发的一个入门级指 南,重点讨论了DB的核心数据结构和数据访问算法,并通过实际的代码演示如何使用DB。最后有一个对DB的简单总结,并提出作者对工具选择的

1566

基于SQL on Hadoop的数据仓库技术

作者简介:孙元浩,星环信息联合创始人兼首席技术官。 责编:仲浩(zhonghao@youkuaiyun.com) 本文为《程序员》原创文章,未经允许不得转载,更多精彩文章请订阅2016年程序员 数据仓库是企业统一的数据管理的方式,将不同的应用中的数据汇聚,然后对这些数据加工和多维度分析,并最终展现给用户。它帮助企业将纷繁浩杂的数据整合加工,并最终转换为关键流程上的KPI,从而为决策/管理等提...

zhong930的博客 1097

实时数仓,为什么不可代替?

实时数仓,为什么不可代替?

eagle89的专栏 1291

Py数据库编程及应用(DB API、SQLite、MySQL、MongoDB、Redis)

# -*- coding: utf-8 -*- #Py数据库编程及应用.py # ============================================================================= # #SQLite数据库 # ==============================================================...

血皇敖天 433

Java 小型数据库漫谈

开发学习过程中使用的java小型数据库总结:Derby HSQL H2Database BerkeleyDB-java-edition

New World 5082

数据库是什么啊

介绍了什么是数据库,并且简单说明了关系型和非关系型数据库的优缺,以及常用数据库程序。

平庸 1061

数据仓库Hive简述

    Hive 是一个构建在 Hadoop 之上的数据仓库,它可以将HDFS数据文件映射成表,并提供类 SQL 查询功能,用于查询的 SQL 语句会被转化为 MapReduce 作业提交到 Hadoop 上运行。其实,Hive是用Java编写的一套基于HDFS分布式数据存储,将SQL编译为MapReduce任务进行分布式计算的数据仓库框架,提供了类似 sq...

戴着红领巾走世界 1188

数据库计算机三级等级考试--数据库技术相关知识点和笔记

计算机三级等级考试笔记,是博主通过计算机三级数据库技术考试的相关笔记,此篇博客,不仅适合需要考计算机三级考试的各位考生,也适合在职场处理关于数据库的部分操作,个人认为算是一篇使用性比较强的文档,我个人认为,我目前所在开发岗位,在回顾去看这篇文档,我都会再次有收获,对了,如果你需要计算机三级的刷题软件,可以一键三连,留下评论,然后私聊博主。总结不易,如果有收获可以在下方评论。

好看的皮囊千篇一律,有趣的灵魂万里挑一。 7213

数据中台、数据平台、数据湖、数据仓库傻傻分不清楚?带你一文理清

大数据时代,数字化转型浪潮下,数据中台、数据仓库、数据库、大数据平台、数据湖等新老概念满天飞,一个概念还没搞清楚又来一个新概念,数字化转型之路还没开始,在起点就先被各种概念搞昏了头。从数据产品的发展历程出发,帮助您一文理清数据、大数据、数据库、数据仓库、数据集市、数据湖、大数据平台、数据中台等概念的定义、应用、区别与联系,这么全面的科普文章,一定要记得收藏哦!

ccddtomato的专栏 4108
上一篇: 疫情结束后,个人涉疫数据都去哪儿了?
下一篇: 项目是否应该开源, 这是一个值得深思的问题
老贾的AI世界
博客等级 码龄7年 3335粉丝 254原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老贾的AI世界

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值