首页 文章 精选 留言 我的

精选列表

搜索[优化],共10000篇文章
优秀的个人博客,低调大师

Redis 单key值过大 优化方式

image.png Redis使用过程中经常会有各种大key的情况, 比如: 1: 单个简单的key存储的value很大 2: hash, set,zset,list 中存储过多的元素(以万为单位) 由于redis是单线程运行的,如果一次操作的value很大会对整个redis的响应时间造成负面影响,所以,业务上能拆则拆,下面举几个典型的分拆方案。 1、单个简单的key存储的value很大 1.1、 改对象需要每次都整存整取 可以尝试将对象分拆成几个key-value, 使用multiGet获取值,这样分拆的意义在于分拆单次操作的压力,将操作压力平摊到多个redis实例中,降低对单个redis的IO影响; 1.2、该对象每次只需要存取部分数据 可以像第一种做法一样,分拆成几个key-value, 也可以将这个存储在一个hash中,每个field代表一个具体的属性,使用hget,hmget来获取部分的value,使用hset,hmset来更新部分属性 2、 hash, set,zset,list 中存储过多的元素 类似于场景一种的第一个做法,可以将这些元素分拆。 以hash为例,原先的正常存取流程是 hget(hashKey, field) ; hset(hashKey, field, value) 现在,固定一个桶的数量,比如 10000, 每次存取的时候,先在本地计算field的hash值,模除 10000, 确定了该field落在哪个key上。 newHashKey = hashKey + (*hash*(field) % 10000); hset (newHashKey, field, value) ; hget(newHashKey, field) set, zset, list 也可以类似上述做法. 但有些不适合的场景,比如,要保证 lpop 的数据的确是最早push到list中去的,这个就需要一些附加的属性,或者是在 key的拼接上做一些工作(比如list按照时间来分拆)。 个人介绍: 高广超:多年一线互联网研发与架构设计经验,擅长设计与落地高可用、高性能、可扩展的互联网架构。 本文首发在 高广超的简书博客 转载请注明! 简书博客 头条号

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

hive优化--增加减少map数

如何合并小文件,减少map数? 假设一个 SQL 任务: Select count(1) from popt_tbaccountcopy_mes where pt = ‘2012-07-04’; 该任务的 inputdir /group/p_sdo_data/p_sdo_data_etl/pt/popt_tbaccountcopy_mes/pt=2012-07-04 共有 194 个文件,其中很多是远远小于 128m 的小文件,总大小 9G ,正常执行会用 194 个 map 任务。 Map 总共消耗的计算资源: SLOTS_MILLIS_MAPS= 623,020 我通过以下方法来在 map 执行前合并小文件,减少 map 数: set mapred.max.split.size=100000000; set mapred.min.split.size.per.node=100000000; set mapred.min.split.size.per.rack=100000000; set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat; 再执行上面的语句,用了 74 个 map 任务, map 消耗的计算资源: SLOTS_MILLIS_MAPS= 333,500 对于这个简单 SQL 任务,执行时间上可能差不多,但节省了一半的计算资源。 大概解释一下, 100000000 表示 100M, set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat; 这个参数表示执行前进行小文件合并, 前面三个参数确定合并文件块的大小,大于文件块大小 128m 的,按照 128m 来分隔,小于 128m, 大于 100m 的,按照 100m 来分隔,把那些小于 100m 的(包括小文件和分隔大文件剩下的), 进行合并 , 最终生成了 74 个块。 如何适当的增加 map 数? 当 input 的文件都很大,任务逻辑复杂, map 执行非常慢的时候,可以考虑增加 Map 数,来使得每个 map 处理的数据量减少,从而提高任务的执行效率。 假设有这样一个任务: Select data_desc, count(1), count(distinct id), sum(case when …), sum(case when ...), sum(…) from a group by data_desc 如果表 a 只有一个文件,大小为 120M ,但包含几千万的记录,如果用 1 个 map 去完成这个任务,肯定是比较耗时的,这种情况下,我们要考虑将这一个文件合理的拆分成多个, 这样就可以用多个 map 任务去完成。 set mapred.reduce.tasks=10; create table a_1 as select * from a distribute by rand(123); 这样会将 a 表的记录,随机的分散到包含 10 个文件的 a_1 表中,再用 a_1 代替上面 sql 中的 a 表,则会用 10 个 map 任务去完成。 每个 map 任务处理大于 12M (几百万记录)的数据,效率肯定会好很多。 看上去,貌似这两种有些矛盾,一个是要合并小文件,一个是要把大文件拆成小文件,这点正是重点需要关注的地方, 根据实际情况,控制 map 数量需要遵循两个原则:使大数据量利用合适的 map 数;使单个 map 任务处理合适的数据量; 本文转自 yntmdr 51CTO博客,原文链接:http://blog.51cto.com/yntmdr/1740587,如需转载请自行联系原作者

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

Android 使用shape来优化界面效果

前些天去参加了一个公开课,说到了我们很多程序对美工比较不在行,所以需要与UI工程师合作,但是有时候UI工程师忙其他的什么,我们既不会PS也不会AI。于是乎在android中我们可以通过shape来定制我们需要的图形效果等。 下午研究了下shape,众所周知shape是形状的意思。网络上的例子太多看的真让人眼花缭乱,自己总结了下,以如何使用shape来做圆角按钮的背景来说明shape的具体使用吧。 看下效果图 具体实现代码: <?xmlversion="1.0"encoding="utf-8"?> <shapexmlns:android="http://schemas.android.com/apk/res/android"> <!--填充--> <solid android:color="#B2B2B2" /> <!--大小--> <size android:width="200dp" android:height="50dp" /> <!--渐变色--> <gradient android:startColor="#DBDCDD" android:endColor="#B8B9BB" android:centerColor="#ADADAF" android:angle="270" /> <!--描边--> <stroke android:width="2dp" android:color="#3D4148" /> <!--圆角--> <corners android:radius="5dp" /> <padding android:left="10dp" android:top="10dp" android:right="10dp" android:bottom="10dp" /> </shape> <!-- 1、solid 描述:内部填充 属性android:color填充颜色 2、size 描述:size:大小 属性: android:width表示形状的宽度 android:height表示形状的高度 3、gradient 描述:渐变色 属性: android:startColor起始颜色 android:endColor结束颜色 android:angle渐变角度(PS:当angle=0时,渐变色是从左向右。然后逆时针方向转,当angle=90时为从下往上。angle必须为45的整数倍) android:type渐变类型(取值:linear、radial、sweep) linear线性渐变,这是默认设置 radial放射性渐变,以开始色为中心。 sweep扫描线式的渐变。 android:centerColor渐变中间颜色,即开始颜色与结束颜色之间的颜色 android:useLevel如果要使用LevelListDrawable对象,就要设置为true。设置为true无渐变。false有渐变色 android:gradientRadius渐变色半径.当android:type="radial"时才使用。单独使用android:type="radial"会报错。 android:centerX渐变中心X点坐标的相对位置 android:centerY渐变中心Y点坐标的相对位置 4、stroke 描述:stroke:描边相当于html中的盒子模型的border 属性: android:width描边的宽度 android:color描边的颜色 android:dashWidth表示描边的样式是虚线的宽度, 值为0时,表示为实线。值大于0则为虚线。 android:dashGap表示描边为虚线时,虚线之间的间隔即“----” 5、corners 描述:corners:圆角 属性: android:radius半径 android:topLeftRadius左上角半径 android:topRightRadius右上角半径 注意一下两个属性比较不同: android:bottomLeftRadius右下角半径 android:bottomRightRadius左下角半径 6、padding 描述:内部边距,即内容与边的距离 属性: android:left左内边距 android:top上内边距 android:right右内边距 android:bottom下内边距 --> 本文转自xuzw13 51CTO博客,原文链接:http://blog.51cto.com/xuzhiwei/972188,如需转载请自行联系原作者

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

Androidi性能优化之高效使用内存

应用生存期的绝大多数时间都在用于处理内存中的数据 性能主要取决于以下三个因素: a:CPU如何操作特定的数据类型 b: 数据和指令需要占用多少存储空间 c: 数据在内存中的布局 访问内存: 因为访问内存会产生一些开销,CPU会把最近访问的内存内容缓存起来,无论是内存读还是内存写,事实上,CPU通常使用两级缓存: a:一级缓存(L1) b:二级缓存(L2) 有些处理器可能还有3级缓存 垃圾回收: Java的一个非常重要的优点是垃圾收集,有两件非常重要的事情值得注意: a:还是有可能存在内存泄露 b:垃圾回收器会帮你管理内存,它做的不仅仅是释放不用的内存。 内存泄露分析工具: a:DDMS视图:Heap以及Allocation Tracker 跟踪内存使用和分配情况 b:Eclipse内存分析器:MAT ,地址www.eclipse.org/mat c:Android 2.3定义的StrictMode类,对检测潜在的内存泄露有很大帮助。 引用: Java定义了4中类型的引用: a:强(Strong) b:软(Soft) c:弱(Weak) d:虚(Phantom) 软引用和弱引用在本质上是相似的,它们没有强到足以保持对象不被删除(或回收)的引用。不同之处在于回收时,垃圾回收器处理它们的引用的对象的积极程度不同。 对象是软可及的,即存在一个软引用,但没有强引用,当有足够的内存保留对象时,垃圾回收器不会回收它。不过如果垃圾会收器决定需要回收更多的内存,那么它可任意回收软可及对象的内存,这种引用类型适用于缓存,它可以自动删除缓存中的条目。 提示:当使用缓存时,确保你了解它使用的是什么类型的引用,例如Android的LruCache使用强引用。 若可及对象,也就是说,存在一个弱引用,但没有强或软引用,下次垃圾回收时基本会被收走,换而言之,垃圾回收器更加积极地回收弱可及对象的内存。这种类型的引用适用于映射,这种映射可以自动删除不再被引用的键,WeakHashMap类就是这么做的。 虚引用最弱,几乎很少用到。 本文转自demoblog博客园博客,原文链接http://www.cnblogs.com/0616--ataozhijia/p/3649427.html如需转载请自行联系原作者 demoblog

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

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文件系统,支持十年生命周期更新。

用户登录
用户注册