java查询oracle一直没有结果返回_Java架构笔记-MySQL 亿级数据需求的优化思路

ba8d1ef68c3b7ed04430a7299d20ecfa.png

上图是从之前看到过的文章里扒出来的图,是由他们58几个牛人写的,并维护的。

按照我的理解一步一步的进行逻辑剖析,有误的话希望大婶们及时评论改正。

分析思路开始:

ba226101faf82ec6b3c757ef7dcaa920.png

这个是文章里提到的数据表结构,ext存这比较多可扩展的属性。然后E-Search就是要对这些属性进行快速的查询搜索。

里面提到了Searcher1 Searcher2,就是一个个用于建立索引用的表。

比如房产:

a9a036170119bd9b95ff6093408d2b72.png

房产现在里面有三个字段,每一个字段对应一张表或多张表,因为字段数据到一定数量的时候,可能单台服务器的存储空间不够了,所以需要分库分表。分表可以按照Hash算法,然后切割成单台服务器可以容下的数量范围,在超过一定冗余范围,就要增加一台冗余服务器,继续分库分表。上面的例子,按照每张表存储100万数据的方式存储。

里面提到merger服务,合并层,并且强调了,增加机器就可以扩容,同时也说明了服务启动时可以加载索引数据到内存,请求访问时从内存中load数据,访问速度很快。

那这个merger要做些什么呢?应该怎么做呢?

好了,现在分析业务需求,咱们模拟一个场景和一个查询需求,分析一下整体是怎么工作的。

在看了58同城网站时候,发现了几个特点。

一、有分页,但是没有一共多少条的分析和统计

dd78bc4c7cca334f9a76a1fe3b1c23e9.png

二、检索条件是可以随意的设定,有很多的条件可以进行添加

51fb3b3a9c7761fee4ee7b08aa4c1258.png

然后我们沿着我们的表设计开始进行模拟一个搜索过程。

那么,我们假设几个查询条件

价格:1700~2500

地址:大连 (dl)

面积:190平米以内

按照价格从低到高进行排序

分页每页10条

按照以上的查询条件,我们分别在这六张表上进行搜索。

租金:Table1 2000条,Table2 500条,一共2500条

地址:Table3 999993条,Table4 8条,一共 1000001条

面积:Table5 5000条

下一步,当然就要把这些条件查询的结果进行合并,就是所谓的merger要做的事。

首先,要知道排序要用价格从低到高进行排序,我们知道查询结果就是按照索引进行排序好的排序文件,大小就是12345这样从低到高进行索引的。那就从Table1开始循环,因为是and关系,只要数据既符合地址的条件,又符合面积的条件,就算合格一条,只要累积满足了10条,就可以返回了。这个时候,其他的条件加载在内存里,但怎么比较比较快呢?

这时候,就涉及到Hash算法了,比如Java有个HashMap,我们可以把其他数据全部加载到HashMap里,然后Table1每循环一次要用containsKey方法,与其他的表进行确认一下是否存在,由于Hash算法速度很快,就可以很快的凑出来前10条。

3ed99df2a206ad6107b82ff81a17af73.png

这个时候,第一页的结果就完成了。

那么,就要问了,第二页,第三页,第四页怎么办?

在我们循环Table1的时候,会有一个循环的游标位置,index,比如凑了10条,游标游到了25才凑齐返回,那我们就把这个25一同返回,作为下一页的起点。

由于系统不需要统计一共查询多少结果,所以我们依次往下迭代就可以了。

前台得到了25这个游标,那么,下一页直接从Table1结果25在往后开始循环寻找条件符合的数据,凑成10条,并且返回index ,依次往后进行。

其他问题总结:

一、索引表冗余问题

就像那个文章所说的,系统不要求一致性,所以每次有新的数据插入,在插入Ext表之后,分别给到searcher的索引表里,进行更新索引,当某个字段索引表空间不够了,增加冗余服务器,进行切分数据以保证重建索引速度及存放空间能力。

二、merger服务冗余问题

由于merger服务与索引表在同一服务器上,当表控件需要增加的时候,merger服务也随着增加,同时要保证这台服务器的内存能够可以实现单表最大数据存储计算能力。

三、EXT数据的冗余问题

直接就按照UID的增加,如果单台服务器不够,直接增加

四、100亿数据导入问题

有个100亿的数据问题,要求从Oracle数据库导入到MySql下。要求原系统不能停,还要求最后的数据是一致的。这个思路就是,把MySql进行分库分表规划好后,进行导数据,并且业务系统在不停的情况下产生的新的操作,同时更新Oracle和MySql,最后就可以实现两个库的一致性。

06d94adbba8d0e3994f7c3dc8814d7e8.png
虚幻引擎中蓝图间的几种通信方式 学习了虚幻一段时间,是看的谌嘉诚的视频入的门,里面做过挺多的功能,但是在之后总是会忘记,所以这次又重新温习了一遍虚幻官方的蓝图,对蓝图通信这方面又做了一个巩固。蓝图通信在虚幻中很重要,主要有以下四种方式: 一、直接通信 直接通信的方式是最常用的也是最好理解的。比如两个蓝图类中,一个蓝图想要调用另外一个蓝图中的参数或者函数,就可以使用这种方法。 举个例子:当玩家按F的时候,灯就没了。 这里会用到初学者包中的灯蓝图,将这个蓝图拖入到场景中,打开这个蓝图,你会发现他里面的组件有一个static me. 阅读详情

相关推荐

UE4 面试题整理

new首先会去调用operator new函数,申请足够的内存(大多数底层用malloc实现),然后调用类型的构造函数来初始化变量,最后返回自定义类型的指针,delete先调用析构函数,然后调用operator delete函数释放内存(大多数底层用free实现)不可以,在DS(dedicated server)模型下,AIController只存在于服务端,其主要是通过在服务端对Pawn进行操控,sprintf:sprintf函数用于将格式化的字符串输出到一个字符数组中。然后再同步到客户端。

qqQQqsadfj的博客 1万+

C++开发工程师基础面试题

C++开发工程师基础面试题C++基础1、C和C++的区别2、C++中指针和引用的区别3、结构体struct和共同体union(联合)的区别结构体为什么要内存对齐呢?结构体内存对齐规则如何让结构体按照指定的对齐参数进行对齐?4、#define和const的区别5、重载overload,覆盖override,重写overwrite,这三者之间的区别6、new、delete、malloc、free之间的关系7、delete和delete[]的区别8、STL库用过吗?常见的STL容器有哪些?算法用过几个?9、con

UE引擎开发工程师 1872

Oracle与MySQL核心技术对比:从设计哲学到实战选型指南

数据库作为现代信息系统的核心组件,其选型直接影响着系统的性能、扩展性和长期成本。理解数据库的核心原理,需要从数据存储、事务处理、并发控制等基础概念入手。在众多数据库技术中,Oracle和MySQL代表了两种截然不同的设计哲学:Oracle以其企业级的“全能”与“厚重”著称,内置了高级复制、数据仓库优化等丰富功能,适合对数据一致性和可靠性有极致要求的关键业务;而MySQL则体现了互联网时代的“敏捷”与“灵活”,其可插拔存储引擎架构和更适合横向扩展的特性,使其在成本敏感、快速迭代的Web应用中大放异彩。从技术价

388

史上最全的C++/游戏开发面试问题总结(二)——虚函数,内存,STL

笔者毕业两年,最近通过猎头拿到了腾讯游戏以及网易游戏的两个客户端研发offer(UE4/C++)。在面试前夕,笔者对C++进行了较为全面的复习和总结,乐观估计可以涵盖80%左右的面试基础问题。这个系列的文章预计有《C++基础》、《内存、STL、虚函数相关》、《数据结构与算法》、《操作系统与网络》四篇(当前是第二篇),每篇都是以问答的形式分享并给出了参考资料的链接地址。大部分问题回答的比较简洁,需要...

音视频开发进阶 906

Hibernate实战:MySQL到Oracle数据迁移的踩坑与性能优化

数据迁移是后端开发中绕不开的高难度任务,尤其在跨数据库平台时,需要处理字段映射、主键策略、时区差异以及大数据量下的内存与性能问题。ORM框架Hibernate通过对象模型与数据库方言的映射,能够在复杂业务系统中复用已有实体关系,显著降低手工SQL的翻译成本。当源库为MySQL、目标库为Oracle时,利用Hibernate的分页读取、批量写入、事务边界控制以及连接池调优,可以有效规避OOM、主键冲突和LazyInitializationException等典型故障。本文从实体映射、双数据源配置、键集分页、断

weixin_34174105的博客 419

Oracle分页查询深度解析:从ROWNUM到ROW_NUMBER()的高性能实践指南

分页查询是数据库应用中的核心基础技术,用于处理海量数据的高效检索与展示。其原理在于通过限制返回结果集的数量,避免一次性加载全部数据导致的服务器内存压力与网络传输瓶颈。这项技术的核心价值在于保障系统性能与用户体验的平衡,广泛应用于电商列表、社交动态流、后台管理系统等数据展示场景。在Oracle数据库中,实现高效分页需要深入理解其特有的执行机制,例如巧妙运用ROWNUM伪列或更现代的ROW_NUMBER()窗口函数。针对性能优化,关键在于为排序字段建立合适的索引,并解读执行计划以避免全表扫描。本文聚焦于Orac

aodiyi6351的博客 374

说说oracle查询性能优化的思路

Oracle的运行环境中网络稳定性与带宽,硬件性能 使用合适的优化器,得到目标 sql 的最佳执行计划 合理配置 oracle 实例参数 建立合适的索引,减少 IO 将索引数据和表数据分开在不同的表空间上,降低 IO 冲突 建立表分区,将数据分别存储在不同的分区上 根据字段对大表进行逻辑分割 sql 语句使用占位符语句、sql 大小写统一 耗时的操作可以通过存储过程或应用程序控制在...

ConstXiong 325

Oracle数据库核心架构、性能优化与高可用实战指南

数据库作为现代信息系统的核心,其架构设计与性能优化是保障业务连续性和数据一致性的基石。理解数据库的体系结构,包括内存管理、进程协作和存储机制,是进行高效运维和深度调优的前提。在众多企业级应用中,Oracle数据库凭借其成熟稳定的架构和丰富的功能集,尤其在处理高并发事务和海量数据分析方面展现出独特的技术价值。对于金融、电信等关键领域的核心系统,掌握Oracle的核心原理与实战技巧,能够有效提升系统稳定性与处理性能。本文聚焦于Oracle数据库的实战应用,深入解析其内存结构中的SGA与PGA、进程结构中的LGW

weixin_30876945的博客 432

MySQL与Oracle数据库性能优化策略对比分析

总体而言,MySQL的性能优化策略更偏向于“简约”,适合追求快速部署、成本敏感且DBA资源相对有限的场景。其优化工作通常集中在有限的几个关键点上,社区活跃,解决方案易于获取。Oracle的性能优化则是一门“艺术”,适合业务逻辑复杂、数据量巨大、对性能、稳定性和高可用性有极致要求的企业级应用。它提供了从操作系统、存储到SQL语句的全链路深度优化能力,但相应地,对DBA的技术水平和经验要求也更高,总体拥有成本(TCO)也显著高于MySQL。

m0_67891092的博客 757

【MySQL】如何构建一个完整的MySQL知识体系(MySQL专栏启动)_数据库 知识体系构建(2)

MySQL 的软件源码和硬件设计了解之后,就要考虑如何配合我的应用程序工作,例如针对不同的项目如何配置 MySQL 才能更好的利用硬件资源,操作系统和 MySQL 的联系,学习了这些算是覆盖了 MySQL 基础和使用,MySQL 内部是如何实现的。同时要想设计一个好的数据库,对 MySQL 的物理设计的了解不可或缺,这关系到数据库的逻辑设计和物理设计,例如:如何建一个扩展性好的表,利用 MySQL 优化器、查询缓存等等。现在重新好好复习手上的。

2401_83977357的博客 1000

C++经典面试题100例及答案

答:把一些具有共性的对象归类后形成一个集合,也就是所谓的类。答:这样可以提高编译效率,因为分开的话只需要编译一次生成对应的.obj文件后,再次应用该类的地方,这个类就不会被再次编译,从而大大的提高了编译效率。答:这种函数会自动为内联函数,这种函数在函数调用的地方在编译阶段都会进行代码替换。答:常对象是指在任何场合都不能对其成员的值进行修改的对象。答:所谓的回调函数,就是预先在系统的对函数进行注册,让系统知道这个函数的存在,以后,当某个事件发生时,再调用这个函数对事件进行响应。

usstmiracle的博客 3万+

sql查询慢的一种优化思路:尝试将多表查询转为单表查询

当数据量大查询慢时,可以尝试下单表查的速度,如果单表查速度很快,那就想想现在的这个功能能不能改为单表查后通过Java代码或者其他对数据库返回的结果集进行筛选。

z2742431760的博客 546

SGLang HiCache实战:手把手教你配置KV Cache Offload,让大模型推理成本直降84%

本文详细介绍了SGLang HiCache在KV Cache Offload配置与调优中的实战应用,通过多级存储架构和智能卸载策略,显著降低大模型推理成本达84%。文章涵盖HiCache架构优势、环境配置、高级调优策略及生产环境最佳实践,帮助开发者优化GPU显存使用,提升并发处理能力。

weixin_29044713的博客 463

java 多线程并发查询mysql数据

程序猿学社的GitHub,欢迎Star github技术专题 本文已记录到github 文章目录前言需求思路代码 前言 用过mysql的朋友,对mysql性能应该有一定的感悟,数据量级在百万级别查询效率还行,到了千万以上查询性能直线下降。 需求 某数据采集平台,统计各个设备每个月的到报情况 建议使用hive,预处理或者跑任务的方式,因为mysql不适合做相关统计的功能。性能 hive>oracle>mysql 思路 使用多线程并发查询每一天的数据在合并。 代码 /** .

程序猿学社的博客 7877

Oracle EBS R12 AP模块发票导入接口实战:从SQL插入到API调用的完整流程

本文详细解析了Oracle EBS R12 AP模块发票导入接口的完整流程,从SQL插入到API调用的实战技巧。涵盖接口表设计、数据验证、双通道导入机制及错误诊断,特别分享官方文档未提及的高阶优化方案,助力企业实现财务数字化转型。

weixin_33728268的博客 477

手把手实战:快速构建合同智能审查Agent

配置“模型供应商”,选择 “OpenAI-API-compatible”,输入申请到的 “API Key” 和 “URL” 后点击“保存”,如下图示例完成 “AlayaNew/DeepSeek-R1。至此,我们完成了合同智能审核Agent的构建,我们也可以在Dify中把这个智能体发布为API服务,这样企业其它应用如OA就可以通过API集成,在原合同流程中实现智能审核工作。该节点“输入变量”中,配置从“开始”节点中获取上传的文件,输出变量就是合同的内容,配置如下图。接下来我们开始创建智能体。

weixin_46880696的博客 4403

java mysql通用分页_用Java实现异构数据库的高效通用分页查询功能

不同数据库的分页查询语句有着较大区别,其中MySQL数据的limit offset语法最为简单,而SQL Server数据库和Oracle数据库的分页就比较复杂了。网上常见的SQL Server和Oracle数据库的分页语句都或多或少对表结构有要求,比如必须有递增的主键ID等。当我们不能确定所连查询数据表的表结构(比如表是客户动态提供的)时,如何以一种通用且高效的方式在不同数据库上实现分页查询功能...

weixin_31363715的博客 292

在不同版本Python中安装PyQT5及PyQT5-Tools

在不同版本Python中安装PyQT5及PyQT5-Tools

zoomgu680的博客 2万+

Unity游戏开发中MySQL高效交互架构与实战优化指南

在游戏开发中,数据持久化是核心需求,尤其对于需要管理海量玩家数据、配置和排行榜的中重度游戏。关系型数据库作为数据管理的基石,其高效交互涉及网络通信、连接池管理、SQL注入防范及序列化性能优化等多个工程实践环节。通过合理的架构设计,如服务端代理模式,可以构建安全屏障、实现逻辑中心化,并利用连接池、参数化查询、索引优化和事务处理来提升性能与可靠性。在Unity与MySQL的交互场景中,结合Entity Framework Core、Redis缓存等工具,能够有效应对排行榜、热数据同步等高频场景,为游戏提供稳定、

weixin_34185512的博客 369

spring-ai学习(四)-MCP

创建一个springai项目1.依赖。

zql1455890112的博客 1386

Vibe Writing 手把手教程:Obsidian + Claudian + Skill

本文介绍了Vibe Writing的实操教程,主要使用Obsidian+Claudian+Skill组合。教程包含工具安装配置(Obsidian、Claudian插件)、核心工作流(选题-调研-写作-发布)和效果对比。重点展示了Claude Code生成的文本更具"人味"和场景感,优于其他AI工具。作者强调工具只是辅助,内容灵魂仍需个人思考积累。附有公众号排版和全网发布工具推荐,以及自动配图生成方案。

302

Oracle分页查询全解析:从ROWNUM到OFFSET-FETCH的性能优化实战

分页查询是数据库开发中的核心基础技术,用于解决大数据量场景下的数据展示与性能平衡问题。其原理是通过分批加载数据,避免单次查询返回过多记录导致的内存与网络压力。在技术实现上,不同数据库系统提供了各具特色的分页机制,例如MySQL的LIMIT语法。Oracle数据库作为企业级应用的主流选择,其分页实现方式尤为独特,主要依靠ROWNUM伪列和ROW_NUMBER分析函数等特性。这些技术不仅保障了查询效率,还能通过索引优化、执行计划调优等手段,显著提升海量数据下的访问性能。在实际的工程实践中,合理的分页策略对于订单

weixin_33834075的博客 390

[Dify实战] OA 公文排版助手:自动格式化、编号、生成摘要-带配套资源

摘要: Dify 公文排版助手通过自动化解决公文处理中的格式混乱、编号错漏等问题。支持标题层级自动编号、摘要生成、要素补全等功能,输出标准化Markdown格式。核心流程包括输入原文、智能识别、自动排版与要素输出,适用于通知、纪要等场景。实施需统一模板规则,规范输入格式,并通过试跑优化纠错率与处理效率。关键价值在于减少人工返工,提升排版一致性,未来可对接OA系统实现全流程自动化。

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 474

MySQL跨实例访问方案:FEDERATED存储引擎替代Oracle dblink实战

数据库跨实例访问是数据集成中的常见需求,Oracle dblink让跨库查询变得透明直接,而MySQL生态中缺少完全对等的原生功能。FEDERATED存储引擎作为MySQL官方内置方案,通过在本地创建映射表将SQL实时转发至远程实例,实现类似dblink的透明访问,且无需额外部署。该引擎在跨库实时查询、数据汇总及Oracle迁移场景中具有轻量、快捷的实用价值,但需注意其事务保护缺失、连接无池化、查询依赖远程索引等边界。正确利用FEDERATED,配合物化表、索引优化等手段,能够在保障数据一致性和查询性能的前

weixin_34162228的博客 284

【HALCON工业视觉应用探索】08. C#+Halcon视觉引导机器人抓取:从入门到工业级实战(附完整代码+部署指南)

摘要:本文聚焦C#+Halcon在视觉引导机器人抓取领域的落地应用,从新手友好的“二十分钟基础引导系统”切入,逐步深入工业级场景(汽车变速箱壳体抓取)。内容涵盖核心概念(手眼标定原理、坐标转换、机器人通信协议)、完整技术流程(图像采集→目标定位→标定转换→机器人执行→结果反馈)、工业级代码实现(多目标识别、智能抓取策略、实时状态监控),以及现场部署关键技巧(硬件选型、通信配置、精度优化)。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1265

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

MySQL知识点最全整理(面试题+笔记+导图),面试大厂不再被MySql难倒!

关于分布式,限流+缓存+缓存,这三大技术(包含:ZooKeeper+Nginx+MongoDB+memcached+Redis+ActiveMQ+Kafka+RabbitMQ)等等。这些相关的面试也好,还有手写以及学习的笔记PDF,都是啃透分布式技术必不可少的宝藏。以上的每一个专题每一个小分类都有相关的介绍,并且小编也已经将其整理成PDF啦《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

2401_83329402的博客 393

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

上一篇: json libcurld 构造_libcurl HTTP POST请求向服务器发送json数据
下一篇: accdb 批量写入数据 慢_将固定区域数据写入数组的最直接方案
乐正昶
博客等级 码龄8年 37粉丝 84原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值