小编导读:
多点 DMALL 成立于2015年,持续深耕零售业,为企业提供一站式全渠道数字零售解决方案 DMALL OS。作为 DMALL OS 数字化能力的技术底座,大数据平台历经多次迭代平稳支撑了公司 To B 业务的快速开展。随着国家产业升级和云原生技术的成熟,平台架构也从存算一体逐步转向存算分离。本文将以 StarRocks 的升级演进为例,分享这一过程中的探索与实践。
通过引入 StarRocks 的存算分离架构、Lakehouse ( Apache Iceberg 外表查询)与 StarRocks on Kubernetes 等特性,多点 DMALL 大数据平台取得了显著成效:
计算资源使用率提高 20%,存储成本降低 40%。
数据建模工作减少,开发效率提升 20%。
新集群部署时间缩短至 1 小时内。
背景
架构1.0
2021 年,多点 DMALL 开始采用 StarRocks 作为统一的大数据 OLAP 引擎。关于当时架构 1.0 版本的背景与使用细节,已在《多点 DMALL x StarRocks:实现存储引擎的收敛,保障高查询并发及低延迟要求》 中详细讲述,本文不再赘述。
简而言之,“数据湖+数据仓库”分层架构虽然能够满足业务需求,但在计算资源利用、存储效率及可靠性方面存在以下问题:
计算资源浪费 :潮汐现象导致资源利用率低,按峰值申请的计算资源经常闲置。
存储数据冗余 :数据需额外同步,多副本存储加剧浪费。
可靠性挑战 :数据同步复杂,扩容延迟影响用户体验。
架构2.0
在“降本增效”的大背景下,多点 DMALL 大数据部门于 2023 年完成了以“数据湖”为核心的大数据平台升级(详见 [1]),引入云原生、存算分离和湖仓一体等新技术。升级后的平台架构如下图所示:
经过存算分离改造后,大数据平台与 StarRocks 的部署架构和数据链路已升级为如下所示:
2023 年中,StarRocks 发布 3.x 版本,新增存算分离、External Catalog 和 Kubernetes 部署等核心特性。在充分调研与验证后,我们利用 3.x 版本对“仓”进行了改造,并经过半年改造与测试,最终形成如下架构:
降低计算成本: StarRocks 计算负载的高峰期集中在白天,Apache Spark 等离线计算负载的高峰期集中在晚上,从宏观上看,可共享同一批资源。按需分配资源显著提升了整体利用率,降低了计算成本。
降低存储成本: StarRocks 支持将内部表存储在兼容 S3 协议的对象存储中,以按需付费模式大幅降低存储成本。此外,可直接读取 Apache Hive 和 Apache Iceberg 中的数据,减少冗余存储,进一步节省成本。
保证查询性能 :通过本地磁盘缓存,StarRocks 在存储分离架构下的查询性能媲美存算一体。同时,基于 Kubernetes 的 HPA 机制,动态调整资源分配,优化用户体验。
应用场景
在完成数据平台架构升级后,我们对增量和部分存量业务进行了改造适配。
多点的数据分析场景主要分为离线 T+1 更新分析和实时更新分析两类。在这两类场景中,我们均采用了新架构进行改造和适配。
T+1 更新分析场景
以 “高维业务报表” 为例,固定维度的分析场景主要针对固化的、标准的业务场景进行分析,帮助企业及时掌握各个维度的业绩情况,助力经营管理层及时进行精细化经营决策。该场景的技术实现主要借助 StarRocks 的 External Catalog 的功能,无需手动建内表,通过自定义 Catalog 直接查询 Iceberg 数据源里的数据。
在充分利用本地 SSD 缓存、自定义刷新缓存逻辑、以及 Kubernetes HPA 弹性扩容的基础上,StarRocks 存算分离模式的查询速率可以达到存算一体的效果,个别大 SQL 在 StarRocks 集群弹性增加 Computer Node Pod 之后,查询速度甚至比存算一体要快一些。 以下是“存算一体+内表”和“存算分离+外表” 真实业务场景的对比测试结果(横坐标为查询 SQL,纵坐标为响应时长)
实时更新分析场景
以 “全链路监控”为例,实时更新分析场景主要针对实时监控、实时报警等场景,帮助企业及时发现问题、解决问题。该场景的技术实现主要借助 StarRocks 的 Default Catalog 功能,通过 CDC 将实时业务数据写入 StarRocks 存算分离内表,目前我们采用主键模型进行构建。
从业务 TP 数据库写入数据到最终落入 StarRocks,平均时效性约为 10 秒。 通过该方案实现业务数据的实时展示和异常报警,帮助企业及时发现并解决问题,提升运营效率。
收益
从最终效果来看,多点 DMALL 大数据平台引入 StarRocks 的存算分离架构、Lakehouse (外表查询)与 StarRocks on Kubernetes 等特性,在保证存量业务查询性能无影响的前提下,达到了如下收益:
机器成本降低: 通过引入存算分离的特性,利用“数据持久化使用按需付费的对象存储”、“本地 SSD 盘只用于查询加速”、“计算节点弹性扩缩容” 等特性,整体计算资源使用率提高20%,存储成本降低超过40%;
开发效率提高: 通过采用 External Catalog 直接查询 Iceberg 数据源,数据工程师无需再手动建内表,减少了数据建模的工作量,开发效率提高了20%;
运维效率提高: 通过采用 StarRocks on Kubernetes 的特性,在部署维护新集群时,无需再手动部署,只需通过 YAML 文件配置即可实现集群的自动部署,提高了运维效率。目前客户私有化环境部署一套新集群,只需要准备好对象存储服务以及 Kubernetes 集群,可以在1小时内完成集群的部署交付。
实践经验
每次技术升级都伴随“阵痛”,架构变化和新特性使得升级过程像是重新学习新引擎,过程中遇到许多挑战,也积累了宝贵经验。本篇文章将秉持技术开源共享的精神,从 Lakehouse(存算分离外表)、Shared Data(存算分离内表)、StarRocks on Kubernetes(部署)等方面总结经验,与大家分享。
Lakehouse
StarRocks 自 2.3 版本起支持 Catalog(数据目录)功能,可在一套系统内同时维护内外部数据,便捷访问并查询各类外部数据源。在此基础上,我们根据自身场景需求进行了以下改造与增强。
1.1 统一数据湖鉴权
StarRocks on Kubernetes 原生支持对接 LDAP 登录及 Apache Ranger 的鉴权。但是为了提升鉴权效率与灵活性,在大数据集群进行升级时我们就已经重构了集群权限体系。
在使用 StarRocks on Kubernetes 之前,我们对 FE 中相关代码进行了调整,对接司内的登录和鉴权逻辑,达到了统一管控的效果。
添加自定义登录接口及实现类,对接司内 UniDATA 大数据平台统一登录,无需管理不同引擎的登录信息。
简化 StarRocks 的管理权限设计。根据过往司内使用经验,将除库表数据外的其它权限(建立 Catalog、删除 BE 节点、动态修改 FE 配置等)合并为统一的管理权限。并在集群建立时分配给单独的部门组织账户,用于日常管理维护。
将库表数据权限,不论外表还是内表,均对接 Ranger 的 Hadoop Table(Hive)模块进行管控。外表可直接对接,内表设计特殊权限数据结构进行对接。这样的做法不但降低权限管理复杂度,也使数据权限在数据湖层面达成了统一。
通过这种处理方式,数据权限与底层引擎实现了解耦 。无论是 Spark、Flink 还是 StarRocks,其使用的数据权限在整个大数据集群内保持一致,提升用户一致性的体验,减轻集群运维压力。
1.2 统一查询入口
引入 StarRocks 的 Catalog 的特性之后,在查询数据的时候,可以使用 SET CATALOG 或者 SELECT * FROM .. 来切换 Catalog,进而实现查询 Default Catalog 内部表、External Catalog 外部表中的数据。
为提升客户端使用数据模型的灵活性,我们在不改变原有 SQL 的前提下,实现了数据表存储引擎和 Catalog 的路由切换。在 StarRocks 与客户端之间,增加了自研查询代理引擎 MixDB Proxy。该引擎维护逻辑库与查询引擎、Catalog、物理库的映射信息,支持按需切换存储引擎、Catalog 和库。同时,MixDB Proxy 具备鉴权、限流、降级、资源统计、查询审计等功能,不仅大幅减少业务端切换存储引擎的工作量,还保障了查询服务的稳定性。
1.3 优化本地缓存
StarRocks 存算分离版本的核心特性之一是支持对 Apache Iceberg 等湖表的查询。升级前,BI 报表全部使用 StarRocks 内表;升级后,大部分数据查询切换为 Apache Iceberg 湖表。这一改进不仅减少了数据冗余,还省去了单独同步 StarRocks 的任务设置,显著降低了运维压力。不过,直接查询湖表的速度较内表慢,所幸新增的本地磁盘缓存特性大幅缩小了这一差距。
以下是缓存使用的核心配置:
Properties
# 启用缓存功能
datacache_enable = true
# 湖表元数据刷新频率,默认10min,这个参数也控制了湖表数据异步刷新的频率
background_refresh_metadata_interval_millis = 600000
在升级过程中,我们从 v3.2.7 开始调试,并在正式上线前升级到 v3.3.2。新版本的缓存功能新增了异步填充等策略,进一步提升了用户体验。但在测试对接 BI 分析应用时,仍遇到首次查询报表速度较慢的问题。未配置定时预热时,每日首次查询主要访问 Apache Iceberg 中新的分区数据,大部分数据未被缓存。
尽管 StarRocks 提供了预热功能,但需要设置明确的库表和过滤条件。作为多点 DMALL 大数据基础层,我们面对几十个 StarRocks 集群,每个客户的需求各不相同,难以统一设计和管理这些预热任务。经过讨论,我们决定自研缓存刷新工具。该工具以 Kubernetes 上的 CronJob 作为载体,支持每日定时预刷新缓存,大幅提升了 BI 分析应用用户的使用体验。
缓存刷新工具每日从 AuditLoader Table 中获取最近一段时间的查询 SQL,进行统计和分析。通过解析、拆分与重组,初步整理出查询相关的库表和过滤条件。基于过往查询行为,工具采用统计学习的方法,预测下一日可能的查询数据范围,并据此改写和优化查询条件。
为应对缓存目录容量有限可能触发的 LRU 缓存淘汰问题,工具会根据查询频率对库表进行排序,将高频库表排在最后执行。最终,工具将优化后的查询条件转化为 SQL,并打上标签执行缓存刷新。
1.4 升级开发模式
之前采用 DataLake + Warehouse 分层架构(以 Apache Iceberg + StarRocks 为例)时,可以在对 Apache Iceberg 表的 Schema 或加工逻辑进行修改后,经过充分验证,再将结果数据同步至 StarRocks。在 Apache Iceberg 的逻辑调整及数据重跑过程中,StarRocks 的查询不受影响。
然而,在升级为 Lakehouse 架构后,若修改了 Apache Iceberg 的逻辑,并对原表执行 Insert Overwrite 操作,StarRocks 的查询将立即感知到数据变化。但在数据尚未经过充分验证的情况下,可能会引发数据质量问题。
由于我司采用 Apache Iceberg 作为数据湖的表结构,我们通过 Apache Iceberg 提供的 branch 特性有效解决了这一问题。具体而言,StarRocks 在通过 External Catalog 查询 Apache Iceberg 表时,默认访问的是 main branch。
当需要对现有 Apache Iceberg 表的加工逻辑进行修改时,我们基于现有的 main branch 新建了 audit-branch,在 audit-branch 进行迭代升级。验证通过后,将 audit-branch 的变更合并回 main branch。
最后,通过以下命令对 StarRocks 的本地 SSD 缓存进行强制更新。
REFRESH EXTERNAL TABLE [external\_catalog.][db\_name.]
[PARTITION ('partition\_name', ...)]
存算分离 Shared Data
在 StarRocks 存算分离架构中,数据存储在成本更低且更可靠的远程存储系统中。针对数据实时更新的场景,我们采用了StarRocks 内表的方式进行存储,在使用过程中,遇到了以下问题并进行调优。
2.1 云原生主键索引
在接入部分实时表到 StarRocks 后,我们发现主键索引带来的磁盘压力成为无法忽视的巨大隐患。彼时使用的 v3.3.0中,主键索引与缓存一起写在 PV 上,且由于云厂商提供的 StorageClass 不支持自动扩展,需要手动重装整个集群。随着事实表数据的不断增加,预估主键索引所需的磁盘容量成为了我们面临的第一个难题。
幸运的是, StarRocks v3.3.2 版本支持将主键索引写入对象存储,同时利用缓存进行索引预热。通过将集群升级到 v3.3.2 ,并对主键的列数和长度进行了优化,选用了占用内存较少的数据类型(如 INT、BIGINT 等),我们有效缓解了磁盘容量压力问题。
具体来看,在升级前,当我们搭建集群并接入仅有100张内表时,配备5个 CN节点 ,每个节点挂载60GB的云磁盘,集群的磁盘容量已经面临严重瓶颈。而在升级到 v3.3.2 后,我们将每个节点的磁盘容量缩小至20GB,将大量的主键索引写入对象存储,节省了约 80% 的存储成本。更重要的是,后续接入新的内表时,我们无需担心磁盘压力或额外申请资源。 在通过适当的参数调优后,集群运行更加稳定,极大地释放了运维压力。
Properties
# 修改表的属性,支持基于对象存储上的持久化索引
"enable_persistent_index" = "true",
"persistent_index_type" = "CLOUD_NATIVE"
2.2 Compaction 调优
集群稳定运行了一段时间后,某天 CN Pod 突然崩溃并多次重启,导致实时任务写入失败并触发报警。经过深入分析,我们发现问题的根本原因是业务量激增,实时任务的写入数据量急剧增加,导致 compaction 临时文件清理不及时,并与缓存争抢资源,最终引发了磁盘容量不足,导致 CN Pod重启。
在集群搭建时,考虑到写多读少的场景,且加速要求不高、缓存需求量较小,为了控制成本,我们将每个 CN 节点的磁盘容量限制在 20GB。然而,当写入数据量增加时,compaction 和缓存争抢资源的问题变得尤为突出。
为了解决这一问题,我们首先尝试了调整缓存和 compaction 相关的参数,包括控制缓存占用的磁盘容量、提高 compaction 的并发度和执行效率,并增加单磁盘 compaction 线程的数量。这些调整暂时稳定了集群,但在 CN 节点扩缩容的过程中,我们仍然遇到临时文件过大导致磁盘崩溃的问题。
经过进一步分析和社区帮助,我们意识到有些参数仅适用于存算一体的场景,而我们的集群是基于存算分离架构 的。最终,通过设置 enable\_light\_pk\_compaction\_publish 参数,彻底终结了“磁盘争夺战”。
# 关闭轻量级主键表compaction的设置,关闭后,compaction临时crm文件不会再写入/cn/storage/tmp,这对于我们这样的小磁盘环境非常重要
enable_light_pk_compaction_publish = false
# 允许vertical compaction时将临时数据写到磁盘。
lake_enable_vertical_compaction_fill_data_cache = true
# 主键表单次compaction可以合并的最大数据比例。调大比例,提升总体速度。
update_compaction_ratio_threshold = 0.8
# compaction时远程读Buffer的大小,默认1M,扩大该值,提升总体速度
lake_compaction_stream_buffer_size_bytes = 5242880
StarRocks on Kubernetes
StarRocks 采用 StarRocks Operator 的方式在 Kubernetes 中自动化部署和管理集群,我们在此基础上,按照自己的场景需求做了以下改造和增强。
3.1 按场景拆分小集群
在以往的 StarRocks 使用中,许多部门和应用的数据集中在一个统一的大集群中,这种模式不仅导致了资源相互挤占和影响,还带来了全手工部署和多样化调优需求的运维压力。在此次升级中,我们针对这些痛点进行了优化:
大数据基座部门承担起类“DBA”的职责,根据需求为每个部门或使用场景快速拉起专属的 StarRocks 小集群。小集群间通过 Kubernetes Namespace 实现资源隔离,每个集群可以根据特定场景进行自定义配置。即使某个集群出现突发状况,也不会对其他集群的正常使用造成影响。
每个小集群持有各自的内表,但共享一份 Apache Iceberg 湖表。无论用户从哪个小集群查询 Apache Iceberg 湖表,结果始终一致。
每个集群设有专属的“集群管理员”角色,支持部门自助进行集群内的管理操作。与此同时,大数据基座部门作为“超级管理员”,统一掌控底层资源和权限,在需要时提供支撑服务。这种分工设计减轻了单点运维压力,提高了整体效率。
3.2 元数据备份与恢复
为了解决 StarRocks 在 Kubernetes 部署中 FE 元数据可能丢失的风险,我们设计了 FE 元数据自动备份工具。该工具通过 Kubernetes 的 SideCar 容器运行,利用 AWS S3 CLI 的 sync 命令,将 FE 节点的元数据按照固定频率(如每10分钟)增量备份到对象存储中。S3 的 sync 命令会自动比对文件大小和更新时间,,同时支持来源目录删除时目标目录同步删除。这种方式资源占用极低,对 FE 容器的正常运行完全没有影响。
如果出现 Kubernetes 机器重启等极端异常情况导致的 FE 元数据丢失,备份数据就派上用场了。恢复工具以 Kubernetes 的 Init Container 为载体,根据配置信息在 FE Container 正式启动前,恢复备份元数据到元数据目录, FE 启动后可正常使用集群。
虽然该工具的设计初衷是应对 Kubernetes 集群异常导致的 FE 元数据丢失,但上线后更多地被应用在实际的迁移或重装场景,如 CRD 限制导致无法修改配置或集群迁移等。
3.3 自定义弹性扩缩容
测试过程中我们发现,CN Pod 的启动速度较慢,即使 PVC 已提前申请,从 HPA 触发扩容到启动完成仍需约 10秒。作为毫秒级查询引擎,这样的启动速度难以支撑高并发的用户查询,影响用户体验。同时,StarRocks 的 MPP 架构特点使得 CN Pod 频繁变动会导致本地缓存命中率降低,进一步影响查询性能。
为了解决这一问题,我们基于 Kubernetes 的特性设置 CronJob 来解决这个问题。通过分析历史监控日志数据,我们制定了以下方案:
白天扩容 :在用户高峰期到来之前,CronJob 会自动调整 CN Pod 的最小数量,提前完成扩容,全天保持这一最小 Pod 数,支撑大部分 BI 分析查询。
夜间缩容 :在用户使用量锐减后,CronJob 会将 CN Pod 的最小数量下调,HPA 逐步触发缩容,释放资源供夜间的入湖、数据同步、数仓构建等离线任务使用。
3.4 解决数据写入与 HPA 的冲突
当 CN Pod 因为 HPA 缩容时,正在实时写入 StarRocks on Kubernetes 的任务会报错,提示无法找到目标 CN Pod。
这一问题的根本原因在于 CN Pod 的关闭流程顺序:通知 FE Pod 的步骤被放在了后面,而此时 Kubernetes 已将 CN Pod 标记为 Terminating 状态,导致无法正常接收请求。
Prologorg.apache.http.conn.HttpHostConnectException: Connect to http://starrocks-cn-3.starrocks-cn-search.starrocks-system.sv... [http://starrocks-cn-3.starrocks-cn-search.starrocks-system.sv... ] failed: Connection refused (Connection refused)
我们利用 Kubernetes 的 Lifecycle 特性,通过配置 PreStop Hook,在 CN Pod 进入 Terminating 状态之前,优先通知 FE Pod 删除该 CN Pod 的连接信息,再进行后续关闭步骤。
例子:
YAML
lifecycle:
preStop:
exec:
command:
- sh
- '-c'
- >-
mysql -h$FE_SERVICE_NAME.$POD_NAMESPACE.svc.cluster.local -P9030 -uroot -ppwd -e "ALTER SYSTEM DROP COMPUTE NODE'$HOSTNAME.starrocks-cn-search.$POD_NAMESPACE.svc.cluster.local:9050'";
sh /opt/starrocks/cn_prestop.sh
这个功能在实践中展现了更多价值。例如,云厂商对 StorageClass 的收费通常基于实际使用量,但即使 CN Pod 正常缩容后,遗留的 PV 仍然会保留缓存及临时数据,从而继续产生不必要的费用。然而,Kubernetes 提供的 Pod 缩容自动删除 PVC 和 PV 功能仍处于 Beta 阶段,尚未完全成熟,难以直接应用于生产环境。
于是我们又在 PreStop Hook 上添加了自动删除缓存和临时目录的操作。
总结
在 StarRocks 的升级之路中,我们曾尝试压缩单个 CN Pod 的内存,扩大 CN Pod 的数量,以提升 Kubernetes Node 的装箱率。但测试后发现,这种优化方式并不适用于 StarRocks。即使是在 Kubernetes 部署模式下,StarRocks 也需要配置较大内存和 CPU 的 Pod 来保证服务质量。
多点 DMALL 专注于 To B 业务,在“降本增效”的大背景下,客户对于成本和价值的敏感度更高。因此,在数据分析场景下,StarRocks 的存算分离架构、Lakehouse 外表查询和 StarRocks on Kubernetes 是我们的最佳选择,也是必然选择。整个升级过程也是在不断寻求性能、稳定性与成本之间的平衡,探索一条高性价比的 StarRocks 集群之路,为客户提供更加优质的服务。
后续规划
StarRocks 引入 Serverless容器(如火山云 VCI/华为云 CCI/阿里云 ECI)支持 CN 弹性,充分利用 ResourcePolicy方 式,优先利用 Kubernetes 固定池资源,不足时使用弹性资源,真正实现按需付费和秒级弹性,避免固定节点规格难以提升装箱率;
增强 StarRocks 自身运营功能,如健康诊断、SQL 调优、资源成本报表等;
考虑如何更智能优化 StarRocks 异步物化视图(AutoMV),用于数据仓库构建等;
引入 Paimon 等新的湖仓格式,针对实时更新、实时查询的场景,考虑采用“仓冷沉湖”的方式接入湖表。
文章参考
[1]《多点 DMALL:大数据存算分离下的存储架构探索与实践》
https://juicefs.com/zh-cn/blog/user-stories/separation-of-sto...
关于作者:
任伟 ,多点 DMALL 资深大数据研发工程师,目前负责公司场景化大数据应用、统一数据模型、大数据实时分析引擎架构设计与落地。拥有丰富的场景化数据密集型应用设计经验,长期专注于大数据量实时查询、高性能分布式计算、数据仓库模型、智能算法模型建设与优化等技术。持续跟进多个开源项目 StarRocks、 ClickHouse、Transformers 等技术的企业级应用实践。
李铭 ,多点 DMALL 资深大数据研发工程师,目前负责公司大数据云原生架构设计与数据基座新特性研究;研究领域为大数据统一 SQL 网关、分布式文件存储、高性能计算、数据安全等。大数据开源社区爱好者,重点关注多个开源项目Apache Kyuubi、JuiceFS、Apache Celeborn、StarRocks 等在司内的适配和应用。
更多交流,联系我们:https://wx.focussend.com/weComLink/mobileQrCodeLink/33412/2b42f
你可能感兴趣的:(iceberg)
面向现代数据湖仓的开放表格式对比分析:Iceberg、Hudi、Delta Lake与Paimon
piekill
大数据平台 大数据 spark flink big data 数据仓库
文章目录第一章数据湖的演进:从存储到事务型平台1.1前湖仓时代:ApacheHive的局限性1.2湖仓一体的范式转移第二章架构深度剖析2.1ApacheIceberg:以元数据为中心的设计2.2ApacheHudi:流式优先、时间轴驱动的架构2.3DeltaLake:以事务日志为唯一真相源2.4ApachePaimon:面向实时湖仓的LSM树架构第三章核心能力对比分析3.1事务性与并发控制3.2数
[特殊字符] 实时数据洪流突围战:Flink+Paimon实现毫秒级分析的架构革命(附压测报告)——日均百亿级数据处理成本降低60%的工业级方案
Lucas55555555
flink 大数据
引言:流批一体的时代拐点据阿里云2025白皮书显示,实时数据处理需求年增速达240%,但传统Lambda架构资源消耗占比超运维成本的70%。某电商平台借助Flink+Paimon重构实时数仓后,端到端延迟从分钟级压缩至800ms,计算资源节省5.6万核/月。技术红利窗口期:2025年ApachePaimon1.0正式发布,支持秒级快照与湖仓一体,成为替代Iceberg的新范式一、痛点深挖:实时数仓
Apache Iceberg数据湖基础
Aurora_NeAr
apache
IntroducingApacheIceberg数据湖的演进与挑战传统数据湖(Hive表格式)的缺陷:分区锁定:查询必须显式指定分区字段(如WHEREdt='2025-07-01')。无原子性:并发写入导致数据覆盖或部分可见。低效元数据:LIST操作扫描全部分区目录(云存储成本高)。Iceberg的革新目标:解耦计算引擎与存储格式(支持Spark/Flink/Trino等);提供ACID事务、模式
现代数据湖架构全景解析:存储、表格式、计算引擎与元数据服务的协同生态
讲文明的喜羊羊拒绝pua
大数据 架构 数据湖 Spark Iceberg Amoro 对象存储
本文全面剖析现代数据湖架构的核心组件,深入探讨对象存储(OSS/S3)、表格式(Iceberg/Hudi/DeltaLake)、计算引擎(Spark/Flink/Presto)及元数据服务(HMS/Amoro)的协作关系,并提供企业级选型指南。一、数据湖架构演进与核心价值数据湖架构演进历程现代数据湖核心价值矩阵维度传统数仓现代数据湖存储成本高(专有硬件)低(对象存储)数据时效性小时/天级分钟/秒级
Apache Doris 3.0.6 版本正式发布
数据库apache
亲爱的社区小伙伴们,ApacheDoris3.0.6版本已于2025年06月16日正式发布。该版本进一步提升了系统的性能及稳定性,欢迎大家下载体验。GitHub下载官网下载行为变更禁止Unique表使用时序Compaction#49905存算分离场景下AutoBucket单分桶容量调整为10GB#50566新特性Lakehouse支持访问AWSS3TableBuckets中的Iceberg表格式详
Apache Doris 3.0.6 版本正式发布
SelectDB技术团队
apache 大数据 极速分析 实时分析 数据分析
亲爱的社区小伙伴们,ApacheDoris3.0.6版本已于2025年06月16日正式发布。该版本进一步提升了系统的性能及稳定性,欢迎大家下载体验。GitHub下载官网下载行为变更禁止Unique表使用时序Compaction存算分离场景下AutoBucket单分桶容量调整为10GB新特性Lakehouse支持访问AWSS3TableBuckets中的Iceberg表格式详情请参考文档:Icebe
Iceberg与Hive集成深度
Edingbrugh.南空
数据湖 hive 大数据 hive hadoop 数据仓库
一、Iceberg在Hive中的ACID事务实现与实战1.1传统Hive的事务局限性Hive原生仅支持非事务表(Non-ACID),存在以下痛点:不支持行级更新/删除并发写入时数据一致性无法保证无事务回滚机制历史版本查询需手动实现1.2Iceberg为Hive带来的事务能力Iceberg通过以下机制在Hive中实现完整ACID事务:快照隔离(SnapshotIsolation):每个事务创建独立快
Doris数据集成 Apache Iceberg
猫猫姐
Doris doris iceberg
Doris数据集成ApacheIcebergApacheIceberg是一种开源、高性能、高可靠的数据湖表格式,可实现超大规模数据的分析与管理。它支持ApacheDoris在内的多种主流查询引擎,兼容HDFS以及各种对象云存储,具备ACID、Schema演进、高级过滤、隐藏分区和分区布局演进等特性,可确保高性能查询以及数据的可靠性及一致性,其时间旅行和版本回滚功能也为数据管理带来较高的灵活性。Ap
湖仓融合的“最后一公里”:StarRocks 存算分离如何优化湖上实时分析?
镜舟科技
StarRocks 存算分离架构 实时分析 湖仓融合 金融科技 物化视图 元数据
随着数据量爆发式增长,企业数据架构正经历从传统数据仓库向现代数据湖仓一体化的转变。然而,传统数据湖虽然存储成本低,但分析性能不足;数据仓库虽然查询性能优异,但成本高昂且扩展性受限。湖仓融合面临“最后一公里”问题:如何在保证实时性、一致性的同时平衡成本?一、湖仓融合(Lakehouse)的技术演进湖仓融合的技术演进经历了从简单的数据迁移,到联邦查询,再到深度集成的过程。现代数据湖格式如Iceberg
iceberg整合hive(从hive读取iceberg表数据)实践02
黄瓜炖啤酒鸭
数据湖相关 Flink实时数仓 zeppelin iceberg hive查询iceberg表 hive iceberg整合
目录实现目标:1,创建hadoopcatalog在zeppelin创建hadoopcatalog2,创建基于hadoop_catalog的iceberg表3,从hadoop_catalog来创建hive表,在hiveshell执行4,向iceberg插入数据验证5,hive查询实现目标:在hive查询iceberg表数据1,创建hadoopcatalog在zeppelin创建hadoopcatal
Databend 产品月报(2025年5月)
数据库
五月份的更新来啦!这个月我们为大家带来了不少实用的新功能和性能优化,希望能让你的大数据处理工作更加得心应手。这个月我们一共推出了31个新功能,修复了18个bug,还做了15项性能优化!五月更新亮点重磅功能NgramIndex-让LIKE'%pattern%'查询飞起来,自带bloomfilter加速Iceberg功能增强-新增ORC文件支持,数据缓存和merge-on-read优化AVRO文件支持
Hudi、Iceberg 、 Paimon 数据湖选型对比
菜鸟冲锋号
数据仓库 大数据
Hudi、Iceberg和Paimon是当前数据湖领域的三大主流开源框架,均致力于解决数据湖场景下的增量更新、事务支持、元数据管理、流批统一等核心问题,但设计理念和适用场景存在差异。以下从技术特性、适用场景和选型建议三方面对比分析:一、核心技术特性对比维度HudiIcebergPaimon(原FlinkPaimon)项目定位数据湖存储框架(支持流批写入、增量处理)数据湖表格式(聚焦表管理、元数据与
Doris + Iceberg 构建冷热分层数据湖架构:架构设计与实战指南
晴天彩虹雨
架构 大数据
在海量数据治理与存储演进中,冷热数据分层已成为降本增效的关键策略。本篇将深入探讨如何结合ApacheDoris与ApacheIceberg构建一套高性能、可扩展的数据湖架构,支持冷热数据自动分层、快速查询与灵活扩展。一、背景:为什么需要冷热数据分层?在实际的大数据场景中,数据按照访问频率与实时性可分为:类型特征常见场景热数据最近1小时/1天的数据,查询频繁实时指标、监控、运营分析冷数据近7天、30
推荐干货 | Apache Iceberg 快速入门课程(视频+代码+资料+学习笔记).zip
AI方案2025
Iceberg
ApacheIceberg快速入门课程,包含视频、代码、资料及学习笔记,供大家学习参考。1、Iceberg_课程介绍.mp42、Iceberg简介_概述.mp43、Iceberg简介_特性.mp44、Iceberg简介_其他数据湖框架的对比.mp45、Iceberg存储结构_基本概念.mp46、Iceberg存储结构_查询流程分析.mp47、Iceberg与Hive集成_版本对应关系.mp48、I
Seatunnel系列之:Apache Iceberg sink connector和往Iceberg同步数据任务示例
快乐骑行^_^
大数据 Seatunnel系列 Apache Iceberg sink connector 往Iceberg同步数据 任务示例
Seatunnel系列之:ApacheIcebergsinkconnector和往Iceberg同步数据任务示例一、支持的Iceberg版本二、支持的引擎三、描述四、支持的数据源信息五、数据库依赖六、数据类型映射七、Sink选项八、往Iceberg同步数据任务示例一、支持的Iceberg版本1.4.2二、支持的引擎SparkFlinkSeaTunnelZeta三、描述ApacheIceberg的接
Flink+Iceberg搭建实时数据湖实战
王知无(import_bigdata)
数据库 大数据 hadoop hive mysql
点击上方蓝色字体,选择“设为星标”回复"面试"获取更多惊喜全网最全大数据面试提升手册!第一部分:Iceberg核心功能原理剖析:ApacheIceberg摘自官网:Apache Iceberg is an open table format for huge analytic datasets.可以看到Founders对Iceberg的定位是面向海量数据分析场景的高效存储格式。海量数据分析的场景,
Flink读取Kafka数据写入IceBerg(HiveCatalog)
徐一闪_BigData
大数据 flink iceberg
Readmejava8flink1.13kafka3iceberg0.13链路:Kafka->Flink->IceBerg(HiveCatalog)代码importorg.apache.flink.api.common.serialization.SimpleStringSchema;importorg.apache.flink.streaming.api.datastream.DataStrea
AutoMQ x OSS 的 Iceberg 数据入湖的最佳实践
背景在数字化转型进程中,用户交互行为产生的多维度数据已成为企业的重要战略资产。以短视频平台为例,基于用户点赞事件的实时推荐算法能显著提升用户活跃度和平台粘性。这类实时数据主要通过ApacheKafka流处理平台进行传输,通过其扇出(Fanout)机制实现多业务系统的并行消费。企业的数据应用需求呈现双重特性:一方面需要实时流处理能力,另一方面需要依托历史数据进行多维聚合分析。大数据分析技术经过多年演
Debezium系列之:使用Debezium和Apache Iceberg构建数据湖
快乐骑行^_^
debezium Debezium系列 使用Debezium Apache Iceberg 构建数据湖
Debezium系列之:使用Debezium和ApacheIceberg构建数据湖DebeziumServerIceberg“DebeziumServerIceberg”消费者设置数据复制Upsert模式保留已删除的记录使用Upsert模式追加模式优化批处理大小在数据分析的世界中,数据湖是存储和管理大量数据以满足数据分析、报告或机器学习需求的流行选择。在这篇博客文章中,我们将描述一种构建数据湖的简
数据湖和Apache Iceberg,Apache Hudi,Delta Lake
西土城计划
apache big data 大数据
1什么是数据湖?数据湖这个词目前已经流行开来,逐步被数据相关的从业者接受,可能还有很多人不太清楚它和Hadoop,Hive,Spark这些大数据系统的区别,简单说数据湖是个业务概念,主要是为了区别传统数仓这个概念的(传统数仓的定义:datawarehouse,是用于报告和数据分析的系统,被认为是商业智能的核心组件)。为什么说是“传统数仓”,因为Hadoop于2006年诞生至今已有10多年了,在这期
Apache Iceberg 解析,一文了解Iceberg定义、应用及未来发展
镜舟科技
apache Iceberg StarRocks 元数据 数据湖 湖仓一体 数据分析
什么是Iceberg?ApacheIceberg是一种开源的表格式(TableFormat),专为超大规模数据分析场景设计,通过标准化数据存储规范与访问协议,解决了传统数据湖在元数据管理、事务控制、查询性能等方面的核心痛点。以下从六个维度全面解析其技术原理、应用场景与最佳实践。一、为什么需要新的表格式?传统数据湖面临的痛点数据治理与管理能力不足:传统数据湖在数据治理和管理方面存在明显短板,缺乏严格
如何利用 StarRocks 加速 Iceberg 数据湖的查询效率
镜舟科技
starrocks 镜舟科技 数据湖 大数据 数据库
数据湖作为一种存储各种类型数据的集中式存储系统,以其灵活性、可扩展性和低成本的优势受到越来越多企业的青睐。然而,数据湖虽然降低了数据存储成本,但在数据分析尤其是实时数据分析场景下,其性能仍存在一定瓶颈。本文将探讨如何利用开源项目StarRocks来提升Iceberg的查询效率,为企业提供更快速、更灵活的数据分析能力。作为StarRocks社区的主要贡献者和商业化公司,镜舟科技深度参与 S
数据湖Iceberg、Hudi和Paimon比较_数据湖框架对比(1)
2301_79098963
程序员 知识图谱 人工智能
4.Schema变更支持对比项ApacheIcebergApacheHudiApachePaimonSchemaEvolutionALLback-compatibleback-compatibleSelf-definedschemaobjectYESNO(spark-schema)NO(我理解,不准确)SchemaEvolution:指schema变更的支持情况,我的理解是hudi仅支持添加可选列
数据湖:Apache Iceberg在腾讯的探索和实践
学而知之@
数据库 腾讯 大数据 java 编程语言
摘要:今天分享的是ApacheIceberg在腾讯内部的探索和实践。本文结合腾讯大数据技术分享内容和2020全球软件开发大会分享内容进行整理,主要内容包括:1、数据湖技术概述2、ApacheIceberg的简介3、腾讯为什么选择ApacheIceberg4、腾讯看点万亿数据下的业务痛点5、ApacheIceberg在看点实践6、ApacheIceberg读写和删除ApacheIceberg新一代数
Apache Doris整合Iceberg + Flink CDC构建实时湖仓体的联邦查询分析架构
MfvShell
apache flink 架构 Flink
随着大数据技术的迅猛发展,构建实时湖仓体并进行联邦查询分析成为了许多企业的迫切需求。在这篇文章中,我们将探讨如何利用ApacheDoris整合Iceberg和FlinkCDC来构建这样一个架构,并提供相应的源代码示例。简介实时湖仓体是一种灵活、可扩展的数据架构,结合了数据湖和数据仓库的优势。ApacheDoris是一款开源的分布式SQL引擎,专注于实时分析和查询。Iceberg是一种开放式表格格式
使用 Doris 和 Iceberg
向阳1218
大数据 doris
作为一种全新的开放式的数据管理架构,湖仓一体(DataLakehouse)融合了数据仓库的高性能、实时性以及数据湖的低成本、灵活性等优势,帮助用户更加便捷地满足各种数据处理分析的需求,在企业的大数据体系中已经得到越来越多的应用。在过去多个版本中,ApacheDoris持续加深与数据湖的融合,当前已演进出一套成熟的湖仓一体解决方案。自0.15版本起,ApacheDoris引入Hive和Iceberg
使用 Doris 和 LakeSoul
向阳1218
大数据 doris
作为一种全新的开放式的数据管理架构,湖仓一体(DataLakehouse)融合了数据仓库的高性能、实时性以及数据湖的低成本、灵活性等优势,帮助用户更加便捷地满足各种数据处理分析的需求,在企业的大数据体系中已经得到越来越多的应用。在过去多个版本中,ApacheDoris持续加深与数据湖的融合,当前已演进出一套成熟的湖仓一体解决方案。自0.15版本起,ApacheDoris引入Hive和Iceberg
如何设计高效的数据湖架构?
晴天彩虹雨
架构 大数据 数据仓库
1.引言在大数据时代,数据湖(DataLake)逐渐成为企业存储和处理海量数据的重要基础设施。相比于传统数据仓库,数据湖能够支持结构化、半结构化和非结构化数据,同时提供更灵活的存储与计算能力。然而,如何合理设计数据湖架构,优化存储策略、Schema演进以及数据生命周期管理,是数据架构师必须深入思考的问题。本篇文章将深入探讨数据湖架构的设计方法,结合Hudi、Iceberg、DeltaLake等技术
数据湖架构与实时数仓实践:Hudi、Iceberg、Kafka + Flink + Spark
晴天彩虹雨
架构 kafka flink 数据仓库
1.引言:数据湖与数据仓库的融合趋势在大数据时代,传统的数据仓库(DataWarehouse,DW)因其强一致性和高效查询能力,一直是企业数据分析的核心。然而,随着数据量和数据类型的爆炸式增长,传统数据仓库的存储成本和数据管理难度逐渐增加。为了解决这些问题,数据湖(DataLake)概念应运而生。数据湖能够存储原始数据,支持半结构化和非结构化数据,提供更灵活的计算框架,但其缺乏事务管理和数据一致性
架构师论文《论湖仓一体架构及其应用》
pccai-vip
架构 软考论文
软考论文-系统架构设计师摘要作为某省级商业银行数据中台建设项目技术负责人,我在2020年主导完成了从传统数据仓库向湖仓一体架构的转型。针对日益增长的支付流水、用户行为埋点及信贷审核影像文件等多模态数据处理需求,原有系统存在存储成本激增、实时分析能力不足等问题。新平台需整合12个核心业务系统数据资源,建设支持实时反欺诈、客户画像分析的高性能数据底座。本项目采用Iceberg+Spark架构实现湖仓一
怎么样才能成为专业的程序员?
cocos2d-x小菜
编程 PHP
如何要想成为一名专业的程序员?仅仅会写代码是不够的。从团队合作去解决问题到版本控制,你还得具备其他关键技能的工具包。当我们询问相关的专业开发人员,那些必备的关键技能都是什么的时候,下面是我们了解到的情况。
关于如何学习代码,各种声音很多,然后很多人就被误导为成为专业开发人员懂得一门编程语言就够了?!呵呵,就像其他工作一样,光会一个技能那是远远不够的。如果你想要成为
java web开发 高并发处理
BreakingBad
java Web 并发 开发 处理 高
java处理高并发高负载类网站中数据库的设计方法(java教程,java处理大量数据,java高负载数据) 一:高并发高负载类网站关注点之数据库 没错,首先是数据库,这是大多数应用所面临的首个SPOF。尤其是Web2.0的应用,数据库的响应是首先要解决的。 一般来说MySQL是最常用的,可能最初是一个mysql主机,当数据增加到100万以上,那么,MySQL的效能急剧下降。常用的优化措施是M-S(
mysql批量更新
ekian
mysql
mysql更新优化:
一版的更新的话都是采用update set的方式,但是如果需要批量更新的话,只能for循环的执行更新。或者采用executeBatch的方式,执行更新。无论哪种方式,性能都不见得多好。
三千多条的更新,需要3分多钟。
查询了批量更新的优化,有说replace into的方式,即:
replace into tableName(id,status) values
微软BI(3)
18289753290
微软BI SSIS
1)
Q:该列违反了完整性约束错误;已获得 OLE DB 记录。源:“Microsoft SQL Server Native Client 11.0” Hresult: 0x80004005 说明:“不能将值 NULL 插入列 'FZCHID',表 'JRB_EnterpriseCredit.dbo.QYFZCH';列不允许有 Null 值。INSERT 失败。”。
A:一般这类问题的存在是
Java中的List
g21121
java
List是一个有序的 collection(也称为序列)。此接口的用户可以对列表中每个元素的插入位置进行精确地控制。用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素。
与 set 不同,列表通常允许重复
读书笔记
永夜-极光
读书笔记
1. K是一家加工厂,需要采购原材料,有A,B,C,D 4家供应商,其中A给出的价格最低,性价比最高,那么假如你是这家企业的采购经理,你会如何决策?
传统决策: A:100%订单 B,C,D:0%
&nbs
centos 安装 Codeblocks
随便小屋
codeblocks
1.安装gcc,需要c和c++两部分,默认安装下,CentOS不安装编译器的,在终端输入以下命令即可yum install gccyum install gcc-c++
2.安装gtk2-devel,因为默认已经安装了正式产品需要的支持库,但是没有安装开发所需要的文档.yum install gtk2*
3. 安装wxGTK
yum search w
23种设计模式的形象比喻
aijuans
设计模式
1、ABSTRACT FACTORY—追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯德基,只管向服务员说“来四个鸡翅”就行了。麦当劳和肯德基就是生产鸡翅的Factory 工厂模式:客户类和工厂类分开。消费者任何时候需要某种产品,只需向工厂请求即可。消费者无须修改就可以接纳新产品。缺点是当产品修改时,工厂类也要做相应的修改。如:
开发管理 CheckLists
aoyouzi
开发管理 CheckLists
开发管理 CheckLists(23) -使项目组度过完整的生命周期
开发管理 CheckLists(22) -组织项目资源
开发管理 CheckLists(21) -控制项目的范围开发管理 CheckLists(20) -项目利益相关者责任开发管理 CheckLists(19) -选择合适的团队成员开发管理 CheckLists(18) -敏捷开发 Scrum Master 工作开发管理 C
js实现切换
百合不是茶
JavaScript 栏目切换
js主要功能之一就是实现页面的特效,窗体的切换可以减少页面的大小,被门户网站大量应用思路:
1,先将要显示的设置为display:bisible 否则设为none
2,设置栏目的id ,js获取栏目的id,如果id为Null就设置为显示
3,判断js获取的id名字;再设置是否显示
代码实现:
html代码:
<di
周鸿祎在360新员工入职培训上的讲话
bijian1013
感悟 项目管理 人生 职场
这篇文章也是最近偶尔看到的,考虑到原博客发布者可能将其删除等原因,也更方便个人查找,特将原文拷贝再发布的。“学东西是为自己的,不要整天以混的姿态来跟公司博弈,就算是混,我觉得你要是能在混的时间里,收获一些别的有利于人生发展的东西,也是不错的,看你怎么把握了”,看了之后,对这句话记忆犹新。 &
前端Web开发的页面效果
Bill_chen
html Web Microsoft
1.IE6下png图片的透明显示:
<img src="图片地址" border="0" style="Filter.Alpha(Opacity)=数值(100),style=数值(3)"/>
或在<head></head>间加一段JS代码让透明png图片正常显示。
2.<li>标
【JVM五】老年代垃圾回收:并发标记清理GC(CMS GC)
bit1129
垃圾回收
CMS概述
并发标记清理垃圾回收(Concurrent Mark and Sweep GC)算法的主要目标是在GC过程中,减少暂停用户线程的次数以及在不得不暂停用户线程的请夸功能,尽可能短的暂停用户线程的时间。这对于交互式应用,比如web应用来说,是非常重要的。
CMS垃圾回收针对新生代和老年代采用不同的策略。相比同吞吐量垃圾回收,它要复杂的多。吞吐量垃圾回收在执
Struts2技术总结
白糖_
struts2
必备jar文件
早在struts2.0.*的时候,struts2的必备jar包需要如下几个:
commons-logging-*.jar Apache旗下commons项目的log日志包
freemarker-*.jar  
Jquery easyui layout应用注意事项
bozch
jquery 浏览器 easyui layout
在jquery easyui中提供了easyui-layout布局,他的布局比较局限,类似java中GUI的border布局。下面对其使用注意事项作简要介绍:
如果在现有的工程中前台界面均应用了jquery easyui,那么在布局的时候最好应用jquery eaysui的layout布局,否则在表单页面(编辑、查看、添加等等)在不同的浏览器会出
java-拷贝特殊链表:有一个特殊的链表,其中每个节点不但有指向下一个节点的指针pNext,还有一个指向链表中任意节点的指针pRand,如何拷贝这个特殊链表?
bylijinnan
java
public class CopySpecialLinkedList {
/**
* 题目:有一个特殊的链表,其中每个节点不但有指向下一个节点的指针pNext,还有一个指向链表中任意节点的指针pRand,如何拷贝这个特殊链表?
拷贝pNext指针非常容易,所以题目的难点是如何拷贝pRand指针。
假设原来链表为A1 -> A2 ->... -> An,新拷贝
color
Chen.H
JavaScript html css
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <HTML> <HEAD>&nbs
[信息与战争]移动通讯与网络
comsci
网络
两个坚持:手机的电池必须可以取下来
光纤不能够入户,只能够到楼宇
建议大家找这本书看看:<&
oracle flashback query(闪回查询)
daizj
oracle flashback query flashback table
在Oracle 10g中,Flash back家族分为以下成员:
Flashback Database
Flashback Drop
Flashback Table
Flashback Query(分Flashback Query,Flashback Version Query,Flashback Transaction Query)
下面介绍一下Flashback Drop 和Flas
zeus持久层DAO单元测试
deng520159
单元测试
zeus代码测试正紧张进行中,但由于工作比较忙,但速度比较慢.现在已经完成读写分离单元测试了,现在把几种情况单元测试的例子发出来,希望有人能进出意见,让它走下去.
本文是zeus的dao单元测试:
1.单元测试直接上代码
package com.dengliang.zeus.webdemo.test;
import org.junit.Test;
import o
C语言学习三printf函数和scanf函数学习
dcj3sjt126com
c printf scanf language
printf函数
/*
2013年3月10日20:42:32
地点:北京潘家园
功能:
目的:
测试%x %X %#x %#X的用法
*/
# include <stdio.h>
int main(void)
{
printf("哈哈!\n"); // \n表示换行
int i = 10;
printf
那你为什么小时候不好好读书?
dcj3sjt126com
life
dady, 我今天捡到了十块钱, 不过我还给那个人了
good girl! 那个人有没有和你讲thank you啊
没有啦....他拉我的耳朵我才把钱还给他的, 他哪里会和我讲thank you
爸爸, 如果地上有一张5块一张10块你拿哪一张呢....
当然是拿十块的咯...
爸爸你很笨的, 你不会两张都拿
爸爸为什么上个月那个人来跟你讨钱, 你告诉他没
iptables开放端口
Fanyucai
linux iptables 端口
1,找到配置文件
vi /etc/sysconfig/iptables
2,添加端口开放,增加一行,开放18081端口
-A INPUT -m state --state NEW -m tcp -p tcp --dport 18081 -j ACCEPT
3,保存
ESC
:wq!
4,重启服务
service iptables
Ehcache(05)——缓存的查询
234390216
排序 ehcache 统计 query
缓存的查询
目录
1. 使Cache可查询
1.1 基于Xml配置
1.2 基于代码的配置
2 指定可搜索的属性
2.1 可查询属性类型
2.2 &
通过hashset找到数组中重复的元素
jackyrong
hashset
如何在hashset中快速找到重复的元素呢?方法很多,下面是其中一个办法:
int[] array = {1,1,2,3,4,5,6,7,8,8};
Set<Integer> set = new HashSet<Integer>();
for(int i = 0
使用ajax和window.history.pushState无刷新改变页面内容和地址栏URL
lanrikey
history
后退时关闭当前页面
<script type="text/javascript">
jQuery(document).ready(function ($) {
if (window.history && window.history.pushState) {
应用程序的通信成本
netkiller.github.com
虚拟机 应用服务器 陈景峰 netkiller neo
应用程序的通信成本
什么是通信
一个程序中两个以上功能相互传递信号或数据叫做通信。
什么是成本
这是是指时间成本与空间成本。 时间就是传递数据所花费的时间。空间是指传递过程耗费容量大小。
都有哪些通信方式
全局变量
线程间通信
共享内存
共享文件
管道
Socket
硬件(串口,USB) 等等
全局变量
全局变量是成本最低通信方法,通过设置
一维数组与二维数组的声明与定义
恋洁e生
二维数组 一维数组 定义 声明 初始化
/** * */ package test20111005; /** * @author FlyingFire * @date:2011-11-18 上午04:33:36 * @author :代码整理 * @introduce :一维数组与二维数组的初始化 *summary: */ public c
Spring Mybatis独立事务配置
toknowme
mybatis
在项目中有很多地方会使用到独立事务,下面以获取主键为例
(1)修改配置文件spring-mybatis.xml <!-- 开启事务支持 --> <tx:annotation-driven transaction-manager="transactionManager" /> &n
更新Anadroid SDK Tooks之后,Eclipse提示No update were found
xp9802
eclipse
使用Android SDK Manager 更新了Anadroid SDK Tooks 之后,
打开eclipse提示 This Android SDK requires Android Developer Toolkit version 23.0.0 or above, 点击Check for Updates
检测一会后提示 No update were found