首页 文章 精选 留言 我的

精选列表

搜索[玩转OpenClaw云端创意实践],共10003篇文章
优秀的个人博客,低调大师

阔步"云端" 凯里更"智慧"

“目前这朵‘综治网格信息云’上,已经构建了以村居、社区为单位的199个一级网格;农村、市区以户为单位的1255个二级网格;在二级网格内以十到十五户或以楼栋、单元组建‘十户联防’系统的三级网格。我们通过组建三级网格队伍实现组团式服务,将全市23大项83小项党务政务和民生服务工作下沉网格内办理,实现‘人在格中走、事在网中办’。所以我们的行动快速有效。”项目介绍人吴倩倩介绍的时候,多次提到“这个平台真的很管用”。 “综治网格信息云”的适时运用,极大地促进了凯里市平安建设,实现了今年1-4月“两抢”案件同比下降74%的重大突破。凯里市在案件侦查中,公安人员一键输入查询对象的身份信息,立刻可以看到查询对象的人员关系、社会关系、活动轨迹、个体特征等信息,这种“一键式”查询技术,能够有效帮助公安民警随时发现人员的异动情况,再通过信息比对分析快速锁定罪犯,极大地提高公安实战能力,为城市的发展和稳定提供了强有力的保障。 “综治网格信息云”,主要通过整合公安、旅游、司法、纪委等单位数据资源并向物业等行业扩张,向综治委成员单位开设端口,推动全市20多个部门9大类25项基础数据共享。再依托互联网建立天网深度应用系统和情报信息系统,以及全国联网公安数据库和本地资源数据库建立立体防控应用系统,共同构建领导决策、部门管理、服务民生、群众参与“四大云体系”。 像“综治网格信息云”这样在大数据创新示范应用方面改变市民生活的,并不是一枝独秀。 “智慧旅游云”利用云计算、物联网、移动通信等多种先进技术,整合景区现有旅游信息化建设成果,从智慧管理、智慧营销、智慧服务角度出发,打造多位一体的智慧旅游服务体系。 “智慧医疗健康云”,采用最先进的物联网技术,以居民健康卡为核心,以实现数据互联互通和资源共享为基础,通过家庭医生、双向转诊、远程会诊等相关业务,向上连接各大医院专家、向下对接基层医院、家庭医生和居民,建立线上线下并行的O2O闭环。同时,通过大数据的分析和应用,协助卫生监管部门进行科学智能决策,助推区域内分级诊疗医疗体系的形成,使医疗资源分配更加合理、提升医生工作效率、降低老百姓的就医成本,从根本上解决“看病难、看病贵”的问题。 …… 目前,凯里已在政府治理、民生服务、精准扶贫、产业服务、金融服务等领域广泛开发创新应用。这朵朵“城市云”冉冉升空,悄然改变着凯里人的生活日常,也推动着凯里这座城市大步向智慧城市迈进。 本文转自d1net(转载)

优秀的个人博客,低调大师

玩转 Databend UDF

引言 Databend 作为新一代云原生数据仓库,提供了六百多个内置函数,满足了大部分用户的需求。然而,随着业务的增长,需求也变的日新月异,内置的函数可能无法服务用户变化的需求。在这种场景下, Databend 提供了多种用户自定义函数(UDF)实现方式,满足不同场景下的数据处理需求。 本文将深入探讨三种 UDF 形态:Lambda UDF、UDF Script 和 External UDF Server,并通过具体的案例展示它们的实现方式,最后进行性能对比分析。 Lambda UDF:纯 SQL 定义的函数语法糖 Lambda UDF 是 Databend 中最简单的 UDF 形式,完全通过 SQL 语句定义和执行表达式,适合简单的数据转换和计算。 我们可以在 SQL 中定义一个闭包函数,然后进行调用。 Lambda UDF 示例: 🐳 root@default:) CREATE FUNCTION plus_3 AS (a,b,c) -&gt; a + b + c; 🐳 root@default:) select plus_3(1,2,3); ╭─────────────────╮ │ plus_3(1, 2, 3) │ │ UInt8 │ ├─────────────────┤ │ 6 │ ╰─────────────────╯ 🐳 root@default:) CREATE FUNCTION age AS (d) -&gt; date_diff(year, d, now()); 🐳 root@default:) select age('1992-01-01'::Date); ╭─────────────────────────╮ │ age('1992-01-01'::DATE) │ │ Int64 │ ├─────────────────────────┤ │ 33 │ ╰─────────────────────────╯ 它的特点: 纯 SQL 实现,无需外部语言支持 无法支持递归调用 执行性能受表达式定义影响 UDF Script:多语言扩展能力 Databend 引擎中支持内嵌的多语言执行器, 可以执行通过 Python、JavaScript 和 WASM 编写 UDF Script,适合复杂业务逻辑实现。 Python UDF Databend 使用了 pyo3 引擎来执行 Python script, 我们可以通过如下方式定义一个简单的 Python UDF。 CREATE FUNCTION fib_python ( Int32 ) RETURNS Int32 LANGUAGE python HANDLER = 'fib' AS $$ def fib(n): a, b = 0, 1 for _ in range(n): a, b = b, a + b return a $$; select plus_3(1,2,3); ╭─────────────────╮ │ plus_3(1, 2, 3) │ │ UInt8 │ ├─────────────────┤ │ 6 │ ╰─────────────────╯ Javascript UDF Databend 使用了 rquickjs 引擎来执行 Javascript, 我们可以通过如下方式定义一个简单的 Javascript UDF。 CREATE OR REPLACE FUNCTION fib_js ( Int32 ) RETURNS Int32 LANGUAGE JAVASCRIPT HANDLER = 'fib' AS $$ export function fib(n) { let a = 0, b = 1; for (let i = 0; i &lt; n; i++) { [a, b] = [b, a + b]; } return a } $$; 🐳 root@default:) select fib_js(10); ╭─────────────────╮ │ fib_js(10) │ │ Nullable(Int32) │ ├─────────────────┤ │ 55 │ ╰─────────────────╯ 特点: 支持完整语言特性,实现复杂逻辑 Python UDF 特别适合数据科学和AI集成 JavaScript UDF 适合轻量级数据处理,同时兼顾沙箱安全性 UDF script 属于 Databend 企业特性 WASM UDF 你可以使用 rust 代码来实现 UDF, 然后编译到 Wasm target 中,示例教程。 创建一个项目,Cargo.toml 包含 arrow-udf 依赖 [package] name = "arrow-udf-example" version = "0.1.0" [lib] crate-type = ["cdylib"] [dependencies] arrow-udf = "0.8" 使用 #[function] 宏来定义你的函数 use arrow_udf::function; #[function("fib(int) -&gt; int")] fn fib(n: i32) -&gt; i32 { let (mut a, mut b) = (0, 1); for _ in 0..n { let c = a + b; a = b; b = c; } a } 然后编译到 wasm32-wasip1 cargo build --release --target wasm32-wasip1 将生成的 result.wasm 文件传到 databend stage 中,并定义 wasm udf 函数 🐳 root@default:) create stage s_udf; 🐳 root@default:) put fs:///tmp/arrow_udf_example.wasm @s_udf/; ╭─────────────────────────────────────────────────╮ │ file │ status │ size │ │ String │ String │ UInt64 │ ├─────────────────────────────┼─────────┼─────────┤ │ /tmp/arrow_udf_example.wasm │ SUCCESS │ 1279392 │ ╰─────────────────────────────────────────────────╯ 🐳 root@default:) CREATE OR REPLACE FUNCTION fib_wasm (INT) RETURNS INT LANGUAGE wasm HANDLER = 'fib' AS $$@s_udf/arrow_udf_example.wasm$$; 🐳 root@default:) select fib_wasm(10::Int32); ╭─────────────────────╮ │ fib_wasm(10::Int32) │ │ Nullable(Int32) │ ├─────────────────────┤ │ 55 │ ╰─────────────────────╯ External UDF Server:灵活解耦的外部 UDF 服务 通过 Arrow Flight 协议与外部 UDF Server 通信,适合将已有的服务和 Databend 互联互通。 Example: 启动 UDF Server(Python 示例): from databend_udf import udf, UDFServer import logging logging.basicConfig(level=logging.INFO) @udf( input_types=["INT"], result_type="INT", skip_null=True, ) def fib(n: int) -&gt; int: a, b = 0, 1 for _ in range(n): a, b = b, a + b return a if __name__ == "__main__": udf_server = UDFServer( location="0.0.0.0:8815" ) udf_server.add_function(fib) udf_server.serve() 在 Databend 中注册外部函数: 🐳 root@default:) CREATE OR REPLACE FUNCTION fib_server (INT) RETURNS INT LANGUAGE python HANDLER = 'fib' ADDRESS = 'http://0.0.0.0:8815'; 调用示例: 🐳 root@default:) select fib_server(10); ╭─────────────────╮ │ fib_server(10) │ │ Nullable(Int32) │ ├─────────────────┤ │ 55 │ ╰─────────────────╯ 特点: 需要可靠的网络交互 支持灵活的参数配置:支持批量处理(默认 65536 行/批) 可横向扩展 UDF 服务节点来提高性能 适合与现有微服务架构集成, 与 Databend 服务解耦, 可以与任何支持 Arrow Flight 协议的语言交互 性能对比分析 在单机内存环境下(Databend v1.3.0,16GB RAM),计算 fib(x) 的性能对比: 性能测试环境: Intel(R) Core(TM) i9-12900KF 24C archlinux SQL: select fib((n % 10) ::Int32) from range(1, 1000000) t(n) ignore_result; UDF类型 平均每行数据执行耗时(us) 适用场景 Lambda UDF - 简单转换、快速原型 Python UDF 0.18 复杂逻辑、AI 集成 JavaScript UDF 2.68 轻量级数据处理 WASM UDF 0.11 高性能处理 External UDF 23.2 大规模数据处理 *注:External UDF 耗时包含网络通信,实际处理时间会更短。 性能优化建议: 简单逻辑优先使用 Lambda UDF 复杂计算考虑 Python/JavaScript UDF 高并发场景使用 External UDF 并部署多个服务节点 UDF 选型指南 根据您的业务需求选择合适的 UDF 类型: 对比维度 Lambda UDF UDF Script External UDF Server ​​开发效率​​ ⭐⭐⭐⭐ (纯SQL实现,无需编译) ⭐⭐⭐ (需编写脚本) ⭐ (需独立服务部署) ​​执行性能​​ ⭐⭐⭐⭐ (原生性能) ⭐⭐⭐ (Python/JS运行时开销, wasm性能最佳) ⭐⭐ (支持批量处理,动态扩容,网络开销) ​​复杂逻辑​​ ⭐ (仅限简单表达式) ⭐⭐⭐ (支持完整编程语言) ⭐⭐ (需服务化拆分逻辑) ​​系统集成​​ ⭐ (仅限数据库内部) ⭐⭐ (需适配语言运行时) ⭐⭐⭐⭐ (Arrow Flight协议集成) 实现​​ (n)->CASE WHEN n<=1 THEN n ELSE ... Python/JS实现完整算法逻辑 通过Arrow Flight RPC服务暴露计算接口 ​​适用场景​​ 快速原型/简单转换 AI集成/复杂数据处理 高并发/分布 结语:扩展您的数据能力 Databend 的多形态 UDF 支持为数据处理提供了极大的灵活性。无论您需要快速实现简单转换,还是集成复杂业务逻辑,或是构建分布式计算管道,都能找到合适的解决方案。 参考文档: 查看 UDF 开发文档:UDF指南 参与社区讨论:Github 关于 Databend Databend 是一款开源、弹性、低成本,基于对象存储也可以做实时分析的新式湖仓。期待您的关注,一起探索云原生数仓解决方案,打造新一代开源 Data Cloud。 👨‍💻‍ Databend Cloud:databend.cn 📖 Databend 文档:docs.databend.cn 💻 Wechat:Databend ✨ GitHub:github.com/databendlab...

优秀的个人博客,低调大师

玩转 CSS 变量

如果当年的 CSS 预处理器变量对于初入前端的我来说是开启了新世界的大门,那么 CSS 变量对于我来说无疑就是晴天霹雳。其功能不但可以优雅的处理之前 js 不好处理或不适合的业务需求。更在创造力无穷的前端开发者手中大放异彩。 基础用法 在前端的领域中,标准的实现总是比社区的约定要慢的多,前端框架最喜欢的 $ 被 Sass 变量用掉了。而最常用的 @ 也被 Less 用掉了。官方为了让 CSS 变量也能够在 Sass 及 Less 中使用,无奈只能妥协的使用 --。 <style> /* 在 body 选择器中声明了两个变量 */ body { --primary-color: red; /* 变量名大小写敏感,--primary-color 和 --PRIMARY-COLOR 是两个不同变量 */ --PRIMARY-COLOR: initial; } /** 同一个 CSS 变量,可以在多个选择器内声明。优先级高的会替换优先级低的 */ main { --primary-color: blue; } /** 使用 CSS 变量 */ .text-primary { /* var() 函数用于读取变量。 */ color: var(--primary-color) } <style> <!-- 呈现红色字体,body 选择器的颜色 --> <div class="text-primary">red</div> <!-- 呈现蓝色字体,main 选择器定义的颜色 --> <main class="text-primary">blue</main> <!-- 呈现紫色字体,当前内联样式表的定义 --> <div style='--primary-color: purple" class="text-primary">purple</main> 这里我们可以看到针对同一个 CSS 变量,可以在多个选择器内声明。读取的时候,优先级最高的声明生效。这与 CSS 的"层叠"(cascade)规则是一致的。 由于这个原因,全局的变量通常放在根元素:root里面,确保任何选择器都可以读取它们。 :root { --primary-color: #06c; } 同时, CSS 变量提供了 JavaScript 与 CSS 通信的方法。就是利用 js 操作 css 变量。我们可以使用: <style> /* ...和上面 CSS 一致 */ </style> <!-- 呈现黄色字体 --> <div class="text-primary">red</div> <!-- 呈现蓝色字体,main 选择器定义的颜色 --> <main id='primary' class="text-primary">blue</main> <!-- 呈现紫色字体,当前内联样式表的定义 --> <div id="secondary" style='--primary-color: purple" class="text-primary">purple</main> <script> // 设置变量 document.body.style.setProperty('--primary-color', 'yellow'); // 设置变量,js DOM 元素 ID 就是全局变量,所以直接设置 main 即可 // 变为 红色 primary.style.setProperty('--primary-color', 'red'); // 变为 黄色,因为当前样式被移除了,使用 body 上面样式 secondary.style.removeProperty('--primary-color'); // 通过动态计算获取变量值 getComputedStyle(document.body).getPropertyValue('--primary-color') </script> 我们可以在业务项目中定义以及替换 CSS 变量,大家可以参考 mvp.css。该库大量使用了 CSS 变量并且让你去根据自己需求修改它。 :root { --border-radius: 5px; --box-shadow: 2px 2px 10px; --color: #118bee; --color-accent: #118bee0b; --color-bg: #fff; --color-bg-secondary: #e9e9e9; --color-secondary: #920de9; --color-secondary-accent: #920de90b; --color-shadow: #f4f4f4; --color-text: #000; --color-text-secondary: #999; --font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; --hover-brightness: 1.2; --justify-important: center; --justify-normal: left; --line-height: 150%; --width-card: 285px; --width-card-medium: 460px; --width-card-wide: 800px; --width-content: 1080px; } 我们可以看到基于 CSS 变量,可以更友好的和设计师的设计意图结合在一起。也易于修改,在业务项目中合理使用无疑可以事半功倍。 实现默认配置 如果让我来思考,我肯定无法想象出结合 CSS 预处理器 + CSS 变量便可以实现组件样式的默认配置。这里我先介绍两个关于该功能的前置知识点: 事实上,CSS 变量的 var() 函数还可以使用第二个参数,表示变量的默认值。如果该变量此前没有定义或者是无效值,就会使用这个默认值。 /* 没有设置过 --primary-color,颜色默认使用 #7F583F */ color: var(--primary-color, #7F583F); 虽然目前 CSS 变量不是新的属性,但终究不是所有的浏览器都支持 CSS 变量的,这里我们还是要考虑一下优雅降级。 /* 对于不支持 CSS 变量的浏览器,可以采用下面的写法。*/ a { /* 颜色默认值 */ color: #7F583F; /* 不支持则不识别该条规则 */ color: var(--primary); } 结合 CSS 处理器 + CSS 变量便可以实现组件样式的默认配置。这里参考了有赞的 Vant Weapp 的做法。有赞代码 theme.less 如下所示: // 先导入所有 Less 变量 @import (reference) './var.less'; // 利用正则去替换 Less 变量 为 CSS 变量 .theme(@property, @imp) { @{property}: e(replace(@imp, '@([^() ]+)', '@{$1}', 'ig')); @{property}: e(replace(@imp, '@([^() ]+)', 'var(--$1, @{$1})', 'ig')); } 函数效果如下所示: @import '../common/style/theme.less'; .van-button { // ... 其他省略 .theme(height, '@button-default-height'); .theme(line-height, '@button-line-height'); .theme(font-size, '@button-default-font-size'); } // => less 编译之后生成 .van-button{ // ... 其他省略 height:44px; height:var(--button-default-height,44px); line-height:20px; line-height:var(--button-line-height,20px); font-size:16px; font-size:var(--button-default-font-size,16px); } 我们可以看到每调用一次 Less 函数将会被编译成两个属性。第一个属性的设定对于不支持 CSS 变量的设备可以直接使用,如果当前设备支持 CSS 变量,则会使用 CSS 变量,但是由于当前 CSS 变量未定义,就会使用变量的默认值。虽然 '@button-default-height 虽然也是一个变量,但是该变量仅仅只是 less 变量,最终生成的代码中并没有 --button-default-height 这样的变量。此时我们就可以在使用样式的位置或者 :root 中添加变量 --button-default-height。 这种方式更适合组件开发,因为该方案不声明任何 css 变量,只是预留的 css 变量名称和默认属性。这样的话,无论开发者的选择器优先度有多低,代码都可以很容易的覆盖默认属性。因为我们仅仅使用 css 的默认值。 大家可能有时候会想,这样的话,我们不是有更多的代码了吗?其实未必,事实上我们可以直接直接在页面内部定义变量样式。其他组件直接通过 style 去使用页面内的变量。当然了,事实上书写的代码多少,重点在于想要控制默认样式的粒度大小。粒度越小,则需要在各个组件内部书写的变量越多,粒度大,我们也就不必考虑太多。 Space Toggle 逻辑切换 CSS 没有逻辑切换似乎是一种共识,但是我们可以利用选框(单选与多选)和 CSS 变量来实现判断逻辑。我们先来看看如何使用 CSS 变量。 <style> .red-box { --toggler: ; --red-if-toggler: var(--toggler) red; background: var(--red-if-toggler, green); /* will be red! */ } .green-box { --toggler: initial; --red-if-toggler: var(--toggler) red; background: var(--red-if-toggler, green); /* will be green! */ } </style> <!-- 宽度高度为 100px 的 红色盒子 --> <div style="height: 100px; width: 100px" class="red-box" ></div> <!-- 宽度高度为 100px 的 绿色盒子 --> <div style="height: 100px; width: 100px" class="green-box" ></div> 这里因为一个变量 --toggler 使用空格 或者 initial 而产生了不同的结果,基于这样的结果我们不难想象我们可以触发变量的修改而产生不同的结果。 他不是一个 bug,也不是一个 hack。他的原理完完全全的在 CSS Custom Properties 规范 中。 This value serializes as the empty string, but actually writing an empty value into a custom property, like --foo: ;, is a valid (empty) value, not the guaranteed-invalid value. If, for whatever reason, one wants to manually reset a variable to the guaranteed-invalid value, using the keyword initial will do this. 解释如下,事实上 -foo: ; 这个变量并不是一个无效值,它是一个空值。initial 才是 CSS 变量的无效值。其实这也可以理解,css 没有所谓的空字符串,空白也不代表着无效,只能使用特定值来表示该变量无效。这个时候,我们再回头来看原来的 CSS 代码。 .red-box { /* 当前为空值 */ --toggler: ; /* 因为 var(--toggler) 得到了空,所以得到结果 为 --red-if-toggler: red */ --red-if-toggler: var(--toggler) red; /** 变量是 red, 不会使用 green */ background: var(--red-if-toggler, green); /* will be red! */ } .green-box { /** 当前为无效值 */ --toggler: initial; /** 仍旧无效数据,因为 var 只会在参数不是 initial 时候进行替换 */ --red-if-toggler: var(--toggler) red; /** 最终无效值没用,得到绿色 */ background: var(--red-if-toggler, green); /* will be green! */ /* 根据当前的功能,我们甚至可以做到 and 和 or 的逻辑 * --tog1 --tog2 --tog3 同时为 空值时是 红色 */ --red-if-togglersalltrue: var(--tog1) var(--tog2) var(--tog3) red; /* * --tog1 --tog2 --tog3 任意为 空值时是 红色 */ --red-if-anytogglertrue: var(--tog1, var(--tog2, var(--tog3))) red; } 新式媒体查询 当我们需要开发响应式网站的时候,我们必须要使用媒体查询 @media。先看一下用传统的方式编写这个基本的响应式 CSS: .breakpoints-demo > * { width: 100%; background: red; } @media (min-width: 37.5em) and (max-width: 56.249em) { .breakpoints-demo > * { width: 49%; } } @media (min-width: 56.25em) and (max-width: 74.99em) { .breakpoints-demo > * { width: 32%; } } @media (min-width: 56.25em) { .breakpoints-demo > * { background: green; } } @media (min-width: 75em) { .breakpoints-demo > * { width: 24%; } } 同样,我们可以利用 css 变量来优化代码结构,我们可以写出这样的代码: /** 移动优先的样式规则 */ .breakpoints-demo > * { /** 小于 37.5em, 宽度 100% */ --xs-width: var(--media-xs) 100%; /** 小于 56.249em, 宽度 49% */ --sm-width: var(--media-sm) 49%; --md-width: var(--media-md) 32%; --lg-width: var(--media-gte-lg) 24%; width: var(--xs-width, var(--sm-width, var(--md-width, var(--lg-width)))); --sm-and-down-bg: var(--media-lte-sm) red; --md-and-up-bg: var(--media-gte-md) green; background: var(--sm-and-down-bg, var(--md-and-up-bg)); } 可以看出,第二种 CSS 代码非常清晰,数据和逻辑保持在一个 CSS 规则中,而不是被 @media 切割到多个区块中。这样,不但更容易编写,也更加容易开发者读。详情可以参考 css-media-vars。该代码库仅仅只有 3kb 大小,但是却是把整个编写代码的风格修改的完全不同。原理如下所示: /** * css-media-vars * BSD 2-Clause License * Copyright (c) James0x57, PropJockey, 2020 */ html { --media-print: initial; --media-screen: initial; --media-speech: initial; --media-xs: initial; --media-sm: initial; --media-md: initial; --media-lg: initial; --media-xl: initial; /* ... */ --media-pointer-fine: initial; --media-pointer-none: initial; } /* 把当前变量变为空值 */ @media print { html { --media-print: ; } } @media screen { html { --media-screen: ; } } @media speech { html { --media-speech: ; } } /* 把当前变量变为空值 */ @media (max-width: 37.499em) { html { --media-xs: ; --media-lte-sm: ; --media-lte-md: ; --media-lte-lg: ; } } 其他 继 CSS 键盘记录器 暴露了 CSS 安全性问题之后,CSS 变量又一次让我看到了玩技术是怎么样的。CSS Space Toggle 技术不但可以应用于上面的功能,甚至还可以编写 UI 库 augmented-ui 以及 扫雷 游戏。这简直让我眼界大开。在我有限的开发生涯中,很难找到类似于 css 这种设计意图和使用方式差异如此之大的技术。 CSS 是很有趣的,而 CSS 的有趣之处就在于最终呈现出来的技能强弱与你自身的思维方式,创造力是密切相关的。上文只是介绍了 CSS 变量的一些玩法,也许有更多有意思的玩法,不过这就需要大家的创造力了。 参考资料 augmented-ui css-media-vars css-sweeper 鼓励一下 如果你觉得这篇文章不错,希望可以给与我一些鼓励,在我的 github 博客下帮忙 star 一下。 博客地址

优秀的个人博客,低调大师

【实操手册】如何玩转跨库Join?跨数据库实例查询应用实践

背景 随着业务复杂程度的提高、数据规模的增长,越来越多的公司选择对其在线业务数据库进行垂直或水平拆分,甚至选择不同的数据库类型以满足其业务需求。原本在同一数据库实例里就能实现的SQL查询,现在需要跨多个数据库实例才能完成。业务的数据被“散落”在各个地方,如何方便地对这些数据进行汇总关联查询,已经成为困扰用户的一大难题。 针对这类问题,传统的解决方案需要用户提前将所有实例的数据提前汇集到同一处,然后再做离线查询分析。为此,用户需要维护数据迁移链路,购买机器资源存储汇集起来的数据,付出大量的资源和运维成本。不仅如此,数据迁移也意味着数据延迟,刚刚产生的在线业务数据,需要“等一会”甚至“等一天”才能去做分析,无法满足实时性需求。 为了解决跨数据库实例及时查询的难题,阿里云DMS(数据管理)推出了跨实例查询服务。 什么是跨实例查询服务 跨实例查询服

资源下载

更多资源
Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册