首页 文章 精选 留言 我的

精选列表

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

.NET 8 性能大幅提升,比 .NET 7 遥遥领先

微软 .NET 开发团队的工程师 Stephen Toub 发表博客《Performance Improvements in .NET 8》,详细介绍了.NET 8 中的性能改进。 一言蔽之: .NET 7 was super fast. .NET 8 is faster. .NET 8 比 .NET 7 的超级快更快! 这篇博客全方位介绍了 .NET 8 的性能表现,包括 JIT、原生 AOT、VM、GC、Mono、线程、文件 I/O、网络、JSON 处理、日志等。 JIT Tiering and Dynamic PGO Vectorization Branching Bounds Checking Constant Folding Non-GC Heap Zeroing Value Types Casting Peephole Optimizations Native AOT VM GC Mono Threading [ThreadStatic] ThreadPool Tasks Parallel Reflection Exceptions Primitives Enums Numbers DateTime Guid Random Strings, Arrays, and Spans UTF8 ASCII Base64 Hex String Formatting Spans SearchValues Regex Hashing Initialization Analyzers Collections General List LINQ Dictionary Frozen Collections Immutable Collections BitArray Collection Expressions File I/O Networking Networking Primitives Sockets TLS HTTP JSON Cryptography Logging Configuration Peanut Butter .NET 8 已进入 RC 阶段,有兴趣可以下载体验:https://dotnet.microsoft.com/download/

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

Docker 收购 Mutagen,提升 Docker Desktop 性能和灵活性

Docker 宣布收购了文件同步和网络转发工具 Mutagen 的开发商——Mutagen IO, Inc。 Mutagen 是一个开源、跨平台的文件同步和网络转发工具,用于远程开发,让现有的本地工具能够在云服务器和容器等远程环境中处理代码。它通过提供高性能实时文件同步和灵活的网络转发来实现此功能。 Mutagen 支持本地系统,可通过 SSH 和 Docker 容器进行同步和转发。 根据 Docker 的公告,他们十分看好 Mutagen 的高性能远程开发特性。Mutagen 的同步和转发功能有助于在任意位置之间无缝传输代码、二进制文件和网络请求,从而连接本地和远程开发环境。尤其是当与 Docker 现有的开发人员工具相结合时,Mutagen 为开发者通过本地和远程容器化开发进行创新和加快开发速度带来了新的可能性。

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

AMD openSIL 探索开源系统固件以提升安全性

AMD Fellow 兼首席固件架构师 Raj Kapoor 发文称该公司正在致力于开源系统固件领域的发展,并详细介绍了相关的解决方案 AMD openSIL。 AMD 认为,提高安全性的方法之一是向开源社区开放 Silicon Initialization Firmware 架构、开发和验证。AMD 致力于开源软件,现在正通过 x86 AGESA FW 堆栈的重新架构扩展到各种固件领域 - 以 UEFI 设计作为防止 scaling 的主机固件设计,以其他主机固件解决方案,如 coreboot、oreboot 、FortiBIOS、Project µ 等。一种更新的开放式架构可能会减少攻击面,并且具有明显的无限可扩展性,现在可作为概念验证在开源社区中进行评估,称为 AMD openSIL – Open-Source Silicon Initialization Library。 根据介绍,AMD openSIL 用工业标准语言编写了一套不可知论的库函数,可以静态链接到主机固件,而不必遵守任何主机固件协议。AMD openSIL 被设计为可扩展的、易于集成、重量轻、低调频和透明,从而达到可能改善安全状况的目的。 AMD openSIL 包含三个静态链接库 —— xSIM (x86 Silicon Initialization Libraries)、xPRF (x86 Platform Reference Library) 以及 xUSL (x86 Utilities & Services Library),可以在编译/链接期间静态链接到任何主机固件。下图展示了两个不同的平台主机固件解决方案--UEFI 和 coreboot 之间的可扩展性: AMD 还与开源领域的其他一些组织 9elements、AMI、AWS、3mdeb、Datacom、Google、Meta、Oxide 等,合作开发了基于第四代 AMD EPYC CPU 的第一个 AMD openSIL 实例。按照计划,他们将在 2023 年第二季度(4.19 – 4.20)的 OCP 区域峰会上展示其能力。 总的来说,即将发布的内容具体包括有: 专为第四代 EPYC SoC 设计的 AMD openSIL 库 openSIL Coreboot 集成商指南 AMD openSIL 固件架构规范 与基于第四代 EPYC 的 AMD CRB 平台相关的Coreboot 集成 与基于第四代 EPYC 的 AMD CRB 平台相关的AMI Aptio OpenEdition 但值得注意的是,openSIL 的开发工作目前还在初期阶段,尚未生产就绪。免责声明指出,AMD openSIL 固件库和关联的主机固件作为基于第 4 代 AMD EPYC 的参考平台的概念验证 (PoC) 代码发布。该 PoC 代码还不打算用于生产。AMD openSIL 代码是"as-is"提供的。 更多详情可查看官方博客。

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

使用开源计算引擎提升Excel格式文件处理效率

对Excel进行解析\生成\查询\计算等处理是Java下较常见的任务,但Excel的文件格式很复杂,自行编码读写太困难,有了POI\EasyExcel\JExcel等类库就方便多了,其中POI最为出色。 POI具有全面而细致的xls读写能力 POI可读写多种Excel文件格式,既支持古老的二进制格式(xls),也支持现代的OOXML格式(xlsx),既支持全内存一次性读写,也支持小内存流式读写。POI为大量Excel元素设计了相应的JAVA类,包括workbook、printer、sheet、row、cell,其中,与cell相关的类包括单元格样式、字体、颜色、日期、对齐、边框等。仅单元格样式类,方法就超过了四十个,可进行最全面最细致的读写操作。 POI的读写功能很底层 POI的读写功能全面而细致,但细致也意味着过于底层,开发者必须从头写起,自己处理每一处细节,即使简单的操作也要编写大量代码。比如,读入首行为列名的行式xls: FileInputStream fileInputStream = new FileInputStream("d:\\Orders.xls"); // get the excel book Workbook workbook = new HSSFWorkbook(fileInputStream); if (workbook != null) { // get the first sheet Sheet sheet = workbook.getSheetAt(0); if (sheet != null) { //get the col name/first line Row rowTitle = sheet.getRow(0); // first line if (rowTitle != null) { int cellTitles = rowTitle.getPhysicalNumberOfCells(); // get column number for (int i = 0; i < cellTitles; i++) { Cell cell = rowTitle.getCell(i); //the cell! if (cell != null) { System.out.print(cell.getStringCellValue() + " | "); } } } //get the value/other lines int rows = sheet.getPhysicalNumberOfRows(); // get line number for (int i = 1; i < rows; i++) { Row row = sheet.getRow(i); // get row i if (row != null) { int cells = row.getPhysicalNumberOfCells(); // get column number for (int j = 0; j < cells; j++) { // line number and row number System.out.print("[" + i + "-" + j + "]"); Cell cell = row.getCell(j); // the cell! if (cell != null) { int cellType = cell.getCellType(); Object value = ""; switch (cellType) { case HSSFCell.CELL_TYPE_STRING: // string value = cell.getStringCellValue(); break; case HSSFCell.CELL_TYPE_BLANK: // 空 break; case HSSFCell.CELL_TYPE_BOOLEAN: // boolean value = cell.getBooleanCellValue(); break; case HSSFCell.CELL_TYPE_NUMERIC: // number if (HSSFDateUtil.isCellDateFormatted(cell)) { // date number Date date = cell.getDateCellValue(); value = new DateTime(date).toString("yyyy-MM-dd HH:mm:ss"); }else { // normal number // change to string to avoid being too long cell.setCellType(HSSFCell.CELL_TYPE_STRING); value = cell; } break; case HSSFCell.CELL_TYPE_ERROR: throw new RuntimeException("data type mistaken"); } System.out.println(value); } } } System.out.println("end of the "+i+" line"); } System.out.println("end of the value lines======================================="); } } 行式xls是最常见的格式,但POI并没有为此提供方便的处理方法,只能按照workbook->sheet->line->cell的顺序进行循环解析,造成了如此繁琐的代码。 这还只是将数据简单读出来,如果下一步想再处理数据,还要事先转为结构化数据对象,比如ArrayList<实体类>或HashMap,代码就更繁琐了。 POI查询计算困难 解析Excel并不是目标,我们通常还要对这些文件进查询计算,但POI作为Excel的解析类,没有也不合适再提供相关的方法,只能用JAVA手工硬写。比如基础的分组汇总运算,JAVA代码大概这样: Comparator<salesRecord> comparator = new Comparator<salesRecord>() { public int compare(salesRecord s1, salesRecord s2) { if (!s1.salesman.equals(s2.salesman)) { return s1.salesman.compareTo(s2.salesman); } else { return s1.ID.compareTo(s2.ID); } } }; Collections.sort(sales, comparator); ArrayList<resultRecord> result=new ArrayList<resultRecord>(); salesRecord standard=sales.get(0); float sumValue=standard.value; for(int i = 1;i < sales.size(); i ++){ salesRecord rd=sales.get(i); if(rd.salesman.equals(standard.salesman)){ sumValue=sumValue+rd.value; }else{ result.add(new resultRecord(standard.salesman,sumValue)); standard=rd; sumValue=standard.value; } } result.add(new resultRecord(standard.salesman,sumValue)); Java编码实现计算不仅繁琐,而且存在架构性缺陷。代码很难复用,数据结构和计算代码通常会耦合在一起,如果数据结构发生变化,代码就要重写。查询计算的要求灵活多变,而Java作为编译型语言,每次修改代码都要重启应用,维护工作量大,系统稳定性差。 POI成熟稳定,但读写能力过于底层,且未提供查询计算能力,直接基于POI完成Excel文件的处理(特别是查询计算)的开发效率很低。如果针对POI进行封装,形成简单易用的高级读写函数,并额外提供查询计算能力,就能大幅度提高开发效率了。 esProc SPL就是其中的佼佼者。 SPL内置高级读写函数 SPL是JVM下开源的计算引擎,它对POI也进行了封装,内置简单易用的高级函数,可解析\生成各类格式规则或不规则的xls,并自动生成结构化数据对象。 解析格式规则的行式Excel,SPL提供了T函数。比如解析前面的xls文件,用封装前的POI要几十行,封装后只要一句: =T("d:\Orders.xls") 解析行式Excel是很常见的任务,SPL用T函数封装了POI的功能,接口简单易用。无论xls还是xlsx,T函数都可以统一解析。可自动进行类型转换,开发者无须在细节浪费时间。T函数可自动区分首行的列名和其他行的数据,并根据列名创建序表(SPL的结构化数据对象)并填入数据: 读入并解析成序表后,就可以使用SPL提供的丰富的结构化数据处理方法了: 取第3条记录:A1(3) 取后3条记录:A1.m([-1,-2,-3]) 取记录的字段值:A1(3).Amount*0.05 修改记录的字段值:A1(3).Amount = A1(3). Amount*1.05 取一列,返回集合:A1.(Amount) 取几列,返回集合的集合:A1.([CLIENT,AMOUNT]) 追加记录:A1.insert(200,"APPL",10,2400.4,date("2010-10-10")) 先按字段取再按记录序号取:A1.(AMOUNT)(2);等价于先按记录序号取再按字段取:A1(2).AMOUNT 解析格式较不规则的行式xls,SPL提供了xlsimport函数,内置丰富而简洁的读取功能: 没有列名,首行直接是数据:file("D:\Orders.xlsx").xlsimport() 跳过前2行的标题区:file("D:/Orders.xlsx").xlsimport@t(;,3) 从第3行读到第10行:file("D:/Orders.xlsx").xlsimport@t(;,3:10) 只读取其中3个列:file("D:/Orders.xlsx").xlsimport@t(OrderID,Amount,OrderDate) 读取名为"sales"的特定sheet:file("D:/Orders.xlsx").xlsimport@t(;"sales") 函数xlsimport还具有读取倒数N行、密码打开文件、读大文件等功能,这里不再详述。 解析格式很不规则的xls,SPL提供了xlscell函数,可以读写指定sheet里指定片区的数据,比如读取第1个sheet里的A2格: =file("d:/Orders.xlsx").xlsopen().xlscell("C2") 配合SPL灵活的语法,就可以解析自由格式的xls,比如将下面的文件读为规范的二维表(序表): 这个文件格式很不规则,直接基于POI写Java代码是个浩大的工程,而SPL代码就简短得多: 生成规则的行式xls,SPL提供了xlsexport函数,用法也很简单。比如,上面例子的解析结果是个序表,存在SPL的A1格中,下面将A1写入新xls的第一个sheet,首行为列名,只要一句代码:=file("e:/result.xlsx").xlsexport@t(A1) xlsexport函数的功能丰富多样,可以将序表写入指定sheet,或只写入序表的部分行,或只写入指定的列:=file("e:/scores.xlsx").xlsexport@t(A1,No,Name,Class,Maths) xlsexport函数还可以方便地追加数据,比如对于已经存在且有数据的xls,将序表A1追加到该文件末尾,外观风格与原文件末行保持一致:=file("e:/scores.xlsx").xlsexport@a(A1) 不规则片区写入数据,可以使用前面的xlscell函数。比如,xls中蓝色单元格是不规则的表头,需要在相应的白色单元格中填入数据,如下图: 直接用POI要大段冗长的代码,而SPL代码就简短许多: 注意,第6、9、11行有连续单元格,SPL可以简化代码一起填入,POI只能依次填入。 SPL提供足够的查询计算能力 查询计算是Excel处理任务的重点,SPL提供了丰富的计算函数、字符串函数、日期函数,以及标准SQL语法,不仅支持日常的xls计算,也能计算内容不规则的xls和逻辑复杂的xls。 SPL提供了丰富的计算函数,可直接完成基础计算。比如前面的分组汇总,只要一句: A1.groups(SellerId;sum(Amount)) 更多计算: 条件查询:A1.select(Amount>1000 && Amount<=3000 && like(Client,"S")) 排序:A1.sort(Client,-Amount)" 去重:A1.id(Client)" 关联两个xlsx:join(T("D:/Orders.xlsx"):O,SellerId; T("D:/Employees.xls"):E,EId).new(O.OrderID,O.Client,O.SellerId,O.Amount,O.OrderDate, E.Name,E.Gender,E.Dept)" TopN:T("D:/Orders.xls").top(-3;Amount) 组内TopN (开窗函数):T("D:/Orders.xls").groups(Client;top(3,Amount)) SPL支持大量日期函数和字符串函数,代码量更短,开发效率更高。比如: 时间类函数,日期增减:elapse("2020-02-27",5) //返回2020-03-03 星期几:day@w("2020-02-27") //返回5,即星期4 N个工作日之后的日期:workday(date("2022-01-01"),25) //返回2022-02-04 字符串类函数,判断是否全为数字:isdigit("12345") //返回true 取子串前面的字符串:substr@l("abCDcdef","cd") //返回abCD 按竖线拆成字符串数组:"aa|bb|cc".split("|") //返回["aa","bb","cc"] SPL还支持年份增减、求年中第几天、求季度、按正则表达式拆分字符串、拆出SQL的where或select部分、拆出单词、按标记拆HTML等功能。 SPL提供了标准SQL语法,可以像对数据库表一样直接对xls文件进行查询,极大地降低了数据库程序员的学习门槛: filter:$select * from d:/sOrder.xlsx where Client like '%S%' or (Amount>1000 and Amount<=2000)sort:$select * from sales.xls order by Client,Amont descdistinct:$ select distinct(sellerid) from sales.xls group by…having:$select year(orderdate) y,sum(amount) s from sales.xls group by year(orderdate) having sum(amount)>=2000000join:$select e.name, s.orderdate, s.amount from sales.xls s left join employee.xlsx e on s.sellerid= e.eid SPL支持SQL-92标准中大部分语法,包括集合计算、case when、with、嵌套子查询等,详见<a href="http://c.raqsoft.com.cn/article/1638869916433" rel="nofollow">《没有 RDB 也敢揽 SQL 活的开源金刚钻 SPL》</a> 内容不规则的xls,一般的类库都无能为力,SPL语法灵活函数丰富,可轻松解决处理。比如Excel单元格里有很多”key=value”形式的字符串,需要整理成规范的二维表,以进行后续计算: 逻辑复杂的计算,SQL和存储过程都难以实现,SPL的计算能力更强,可轻松解决此类问题。比如,计算某支股票最长的连续上涨天数: SPL支持更优的应用架构 SPL是解释型语言,提供JDBC接口,可以用SQL或存储过程的形式被JAVA集成,不仅降低了架构的耦合性,还能支持热切换。SPL还支持多种数据源,并支持跨数据源计算。 SPL提供了JDBC接口,可被JAVA轻松调用。简单的SPL代码可以像SQL一样,直接嵌入JAVA,比如条件查询: Class.forName("com.esproc.jdbc.InternalDriver"); Connection connection =DriverManager.getConnection("jdbc:esproc:local://"); Statement statement = connection.createStatement(); String str="=T(\"D:/Orders.xls\").select(Amount>1000 && Amount<=3000 && like(Client,\"*S*\"))"; ResultSet result = statement.executeQuery(str); SPL支持计算外置,可降低计算代码和前端应用的耦合性。复杂的SPL代码可以先存为脚本文件,再以存储过程的形式被JAVA调用: Class.forName("com.esproc.jdbc.InternalDriver"); Connection conn =DriverManager.getConnection("jdbc:esproc:local://"); CallableStatement statement = conn.prepareCall("{call scriptFileName(?, ?)}"); statement.setObject(1, "2020-01-01"); statement.setObject(2, "2020-01-31"); statement.execute(); SPL是解释型语言,通过外置代码可实现热切换。解释型语言无须编译,修改后可立即执行,无须重启JAVA应用,可降低维护工作量,提高系统稳定性。 SPL支持多种文件数据源,除了xls外,SPL还能读写csv\txt\XML\Json等文件,比如对txt进行条件查询: T("sOrders.txt").groups(SellerId;sum(Amount)) $select * from d:/sOrders.txt where Client like '%S%' or (Amount>1000 and Amount<=2000) SPL支持跨数据源计算,比如xls和txt的关联计算: =join(T("D:/Orders.xlsx"):O,SellerId; T("D:/Employees.txt"):E,EId).new(O.OrderID,O.Client,O.SellerId,O.Amount,O.OrderDate, E.Name,E.Gender,E.Dept)" SPL还能访问各类关系型数据库,WebService、Restful等网络服务, Hadoop、redis、Kafka、Cassandra等NoSQL。 POI只适合简单的xls解析\生成任务,且未提供查询计算能力。SPL对POI进行了封装,内置高级读写函数,不仅可以大幅简化代码,还能进行较不规则甚至很不规则的xls解析\生成任务。SPL额外提供了强大的计算能力,不仅支持日常的Excel查询计算,还可计算内容不规则的xls和逻辑复杂的xls。SPL支持更优的应用架构,可实现代码低耦合和热切换,支持多种数据源和跨数据源计算。 SPL资料 SPL官网 SPL下载 SPL源代码 欢迎对SPL有兴趣的加小助手(VX号:SPL-helper),进SPL技术交流群 欢迎关注我的公告号:字母哥杂谈,回复003赠送作者专栏《docker修炼之道》的PDF版本,30余篇精品docker文章。字母哥博客:zimug.com

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

OpenSearch 2.2.0 发布,提升构建性能,升级到 Lucene 9.3

AWS OpenSearch 2.2.0 发布了,OpenSearch 是 AWS 自 Elasticsearch 7.10.2 的开源搜索和分析引擎。 新版本改进内容包括: Features/Enhancements Task consumer Integration (#2293) (#4141) [Backport 2.x] [Segment Replication] Add SegmentReplicationTargetService to orchestrate replication events. (#4074) Support task resource tracking in OpenSearch (#3982) (#4087) Making shard copy count a multiple of attribute count (#3462) (#4086) [Backport 2.x] [Segment Rreplication] Adding CheckpointRefreshListener to trigger when Segment replication is turned on and Primary shard refreshes (#4044) Add doc_count field mapper (#3985) (#4037) Parallelize stale blobs deletion during snapshot delete (#3796) (#3990) [Backport 2.x] [Segment Replication] Add a new Engine implementation for replicas with segment replication enabled. (#4003) [Backport 2.x] Adds a new parameter, max_analyzer_offset, for the highlighter (#4031) Update merge on refresh and merge on commit defaults in Opensearch (Lucene 9.3) (#3561) (#4013) Make HybridDirectory MMAP Extensions Configurable (#3837) (#3970) Add option to disable chunked transfer-encoding (#3864) (#3885) Introducing TranslogManager implementations decoupled from the Engine [2.x] (#3820) Changing default no_master_block from write to metadata_write (#3621) (#3756) Bug Fixes OpenSearch crashes on closed client connection before search reply when total ops higher compared to expected (#4143) (#4145) Binding empty instance of SegmentReplicationCheckpointPublisher when Feature Flag is off in IndicesModule.java file. (#4119) Fix the bug that masterOperation(with task param) is bypassed (#4103) (#4115) Fixing flaky org.opensearch.cluster.routing.allocation.decider.DiskThresholdDeciderIT.testHighWatermarkNotExceeded test case (#4012) (#4014) Correct typo: Rutime -> Runtime (#3896) (#3898) Fixing implausibly old time stamp 1970-01-01 00:00:00 by using the timestamp from the Git revision instead of default 0 value (#3883) (#3891) Infrastructure Correctly ignore depandabot branches during push (#4077) (#4113) Build performance improvements (#3926) (#3937) PR coverage requirement and default settings (#3931) (#3938) [Backport 2.x] Fail build on wildcard imports (#3940) Don't run EmptyDirTaskTests in a Docker container (#3792) (#3912) Add coverage, gha, jenkins server, documentation and forum badges (#3886) Unable to use Systemd module with tar distribution (#3755) (#3903) Ignore backport / autocut / dependentbot branches for gradle checks (#3816) (#3825) Setup branch push coverage and fix coverage uploads (#3793) (#3811) Enable XML test reports for Jenkins integration (#3799) (#3803) Maintenance OpenJDK Update (July 2022 Patch releases) (#4023) (#4092) Update to Lucene 9.3.0 (#4043) (#4088) Bump commons-configuration2 from 2.7 to 2.8.0 in /plugins/repository-hdfs (#3764) (#3783) Use bash in systemd-entrypoint shebang (#4008) (#4009) Bump com.gradle.enterprise from 3.10.1 to 3.10.2 (#3568) (#3934) Bump log4j-core in /buildSrc/src/testKit/thirdPartyAudit/sample_jars (#3763) (#3784) Added bwc version 1.3.5 (#3911) (#3913) Update to Gradle 7.5 (#3594) (#3904) Update Netty to 4.1.79.Final (#3868) (#3874) Upgrade MinIO image version (#3541) (#3867) Add netty-transport-native-unix-common to modules/transport-netty4/bu… (#3848) (#3853) Update outdated dependencies (#3821) (#3854) Added bwc version 2.1.1 (#3806) Upgrade netty from 4.1.73.Final to 4.1.78.Final (#3772) (#3778) Bump protobuf-java from 3.21.1 to 3.21.2 in /plugins/repository-hdfs (#3711) (#3726) Upgrading AWS SDK dependency for native plugins (#3694) (#3701) Refactoring [Backport 2.x] Changes to encapsulate Translog into TranslogManager (#4095) (#4142) Deprecate and rename abstract methods in interfaces that contain 'master' in name (#4121) (#4123) [Backport 2.x] Integrate Engine with decoupled Translog interfaces (#3822) Deprecate class FakeThreadPoolMasterService, BlockMasterServiceOnMaster and BusyMasterServiceDisruption (#4058) (#4068) Rename classes with name 'MasterService' to 'ClusterManagerService' in directory 'test/framework' (#4051) (#4057) Deprecate class 'MasterService' and create alternative class 'ClusterManagerService' (#4022) (#4050) Deprecate and Rename abstract methods from 'Master' terminology to 'ClusterManager'. (#4032) (#4048) Deprecate public methods and variables that contain 'master' terminology in class 'NoMasterBlockService' and 'MasterService' (#4006) (#4038) Deprecate public methods and variables that contain 'master' terminology in 'client' directory (#3966) (#3981) [segment replication]Introducing common Replication interfaces for segment replication and recovery code paths (#3234) (#3984) Deprecate public methods and variables that contain 'master' terminology in 'test/framework' directory (#3978) (#3987) [Backport 2.x] [Segment Replication] Moving RecoveryState.Index to a top-level class and renaming (#3971) Rename and deprecate public methods that contains 'master' in the name in 'server' directory (#3647) (#3964) [2.x] Deprecate public class names with master terminology (#3871) (#3914) [Backport 2.x] Rename public classes with 'Master' to 'ClusterManager' (#3870) Revert renaming masterOperation() to clusterManagerOperation() (#3681) (#3714) Revert renaming method onMaster() and offMaster() in interface LocalNodeMasterListener (#3686) (#3693) 详细每个版本的改进内容请看 https://gitee.com/mirrors/OpenSearch-Project/tree/main/release-note

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

如何通过A/B测试提升Push推送消息点击率?

618电商节火热进行中,某电商App准备向用户推送一条全局活动消息,运营准备了两个推送文案: 文案A:年中囤货我们更懂你,没有大优惠怎敢惊动你:美妆个户,户外运动,医疗健康,一站式备齐,点击>> 文案B:全场特价1折起,跨店满减满300-30,会员更有折上折,6.1激情预售开启,现在就抢,一价到底,点击>> 哪个文案更能打动用户? 我们可以用消息推送来做个A/B测试来确定推送的文案。各选择0.5%的活跃用户,推送不同的文案后分析用户的点击量数据。实际效果如下: 文案A的点击率为:3.3% 文案B的点击率为:11.4% 事后分析,文案B中有用户可直观获取数字价值的促销方案,对用户有较大的吸引力,因此全量推送文案B无疑能让用户点击率和转化率更上一层楼。 应用消息推送的A/B测试功能,支持针对不同文案、不同人群、不同时间进行消息推送对比测试,并在多组对比结果中,选择效果更好地文案或者标签人群进行自动补发,智能化实现最优的推送测试,提高推送点击率。 运营人员会使用推送通知来提高应用的日活或者唤醒沉默用户,让用户为他们的偏好投票,也让运营用最少的成本达到测试目的,继而在全量推送中达到最好的推送效果。 集成华为推送服务就可以使用推送服务的A/B测试功能,推送通知实验可以对推送通知的标题、文案、点击动作甚至是不同人群在不同时间进行消息推送对比测试等进行分组测试。可基于华为分析输出的用户属性、受众群组等条件将实验目标用户按比例分成不同分组,每个组添加不同的策略。然后根据华为分析服务得出不同分组的用户数据,如点击率,转化率等。 华为推送服务A/B测试推送效果 集成步骤 首先,使用推送通知类A/B测试之前,需要集成华为推送服务,可以参考推送服务官方文档进行集成。 操作流程 集成推送服务后,需要在App Gallery Connect上对文案进行配置,下面我会结合一个具体的案例讲解操作步骤。 假如你是一位电商App的运营,平台正在做红包营销活动。你想要对平台所有用户推送优惠券到账消息,你设置了两组不同的文案,为了测试出内容最优(打开率最高)的一组文案,随机对App用户发送消息进行A/B测试。 首先登录App Gallery Connect网站,选择“我的项目”在左侧导航栏中选择“增长 > A/B测试”,找到右上角“创建实验”从下拉框中选择“通知实验” 填写本次A/B测试实验的名称和描述,这里我们可以将实验命名为“618节日促销推送文案测试” 进入“选择实验目标用户”页面,设置实验筛选用户和比例。我们这里选择 “所有用户”参与用户比例设置为5%,系统会从所有用户中筛选出5%的用户,并平均分配到原始组和实验组中。 在“配置原始组和实验组”页面,我们可以将两条待测试的推送文案信息填写在这里。原始组的文案为“您有5元现金红包已入账,限量可领,购物立减,手慢无”实验组的文案为“5元无门槛红包已到账,全场通用,仅限1天有效!”点击文案均跳转到首页。 在“选择跟踪指标”页面,选择本次推送想要跟踪的主要指标和次要指标。我们本次测试想看两种不同推送文案的打开率,所以我们将主要指标设置为“点击率” 在“设置消息选项”页面,可以选择推送时间、推送有效期和推送重要性。点击“保存”会进入实验报告界面,在该界面可以查看本次A/B测试的具体推送效果。 经过以上5步,我们就成功完成了一次A/B测试推送,通过查看测试结果,我们可以找出最理想的通知文案和消息呈现方式,从而提高正式推送时的打开率和转化率。 了解更多详情>> 访问华为开发者联盟官网 获取开发指导文档 华为移动服务开源仓库地址:GitHub、Gitee 关注我们,第一时间了解 HMS Core 最新技术资讯~

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

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

Nacos

Nacos

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

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册