首页 文章 精选 留言 我的

精选列表

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

MongoDB学习笔记(二)--Capped集合 && GridFS存储文件

Capped集合 Capped集合的大小是固定的,如果空间都被用完了,新添加的对象会取代最旧的那个数据。 创建 使用了db.createCollection()方法创建了一个名字为mycapped,空间大小为100000的Capped Colletcion。 限制 如果需要限定Collection中对象的数量,就要设置max参数,如果到了限制的数量,就要移除一个最近的插入。 使用validate()查询mycapped2集合的使用的存储空间。 默认情况下,非Capped集合会在_id上创建索引,而Capped集合不会在_id上创建索引,如果需要在_id上创建索引就需要用到autoIndexID参数。 GridFS存储文件 GridFS存储文件时会分两个集合来存储: files 包含元数据对象。 chunks 包含其他一些相关信息的二进制块。 使用mongofiles put F:\MongoDB\mongodb\bin\bad.txt命令将bad.txt文件保存到了数据库中。 查看数据库中有哪些GridFS文件: 重命名本地的bad.txt文件为bad1.txt,将数据库中文件导出: GridFS的块由单独的集合来存储,默认情况下,使用fs.chunks集合来存储块。 本文转自我爱物联网博客园博客,原文链接:http://www.cnblogs.com/yydcdut/p/3557578.html,如需转载请自行联系原作者

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

HBase学习笔记——基于HBase的日志系统的性能优化

我之前参与过一个日志系统的开发,存储用HBase。我简单罗列下用到的HBase优化,备忘。以后把它整理成更友好的介绍性文章。 系统简介 有一张大的日志数据表,保存所有日志。row key是 hash + app id + log-severity + timestamp + host等,cell保存日志正文数据。 可以看到row key的hash保证日志散列在各个region中,写入、查询的负载均衡。但是无法通过它进行范围查询,所以为不同查询模式,建立了多张索引表。 为不同的日志级别(DEBUG, INFO, WARN, ERROR, FATAL)分别建立了一张索引表。在每张索引表中,row key是 app id + timestamp + host等。也就是说,用于通常选择一个应用,加上时间范围,也可以进一步选择一台应用服务器,来查询日志。 表结构相关优化 多条日志打包,压缩保存。 我们发现,如果简单地将一条日志保存为HBase表中的一行,会导致HBase表记录数很大,row key数量很大,region数量很多,HBase元数据开销很大。这会造成HBase集群不稳定。 于是,我们决定将多条日志打成一个包(chunk)。一个包作为HBase表中的一行保存,大大减少了HBase表的记录数,减轻了HBase元数据的开销。打包是通过写入日志时,在应用服务器的内存中收集日志直到字节数超出一定阈值来实现的。 除了打包,压缩也是在应用服务器端完成的,而不是依靠HBase (column family的compression配置)完成。因为我们希望压缩不仅能节省HBase存储空间,还要能节省应用服务器和HBase之间的网络流量。 打包时,根据row key的语义,正确设置row key。比如开始时间是第一条日志的开始时间,结束时间是最后一条日志的结束时间。 时间上相邻的日志,其正文内容往往很相似。因此,将多条日志打包压缩,比一条一条日志分开压缩,能获得更高的压缩率,节省网络传输带宽和存储。 打包意味着查询时的解包。为此我们部署了coprocessor在HBase集群中,充分利用HBase集群的CPU解包。 fuzzy row filter 通常来说,只有查询条件是row key的前缀,这个row key才能被用于查询。例如如果某张表的row key是 app id + host,则它能被用于根据某个应用id 的日志查询, 和 根据应用id + host的查询。 如果要根据host查询,上述row key就不行了,不符合前缀匹配。我们得遍历整个表中所有的row key,对每个row key检查它是否以查询条件中给定的host结尾——十分低效。假如有10个应用,每一个应用有100个host,我们只能遍历10*100=1000条记录,找到给定host的记录。 但是,应用FuzzyRowFilter后,我们仍然可以部分利用这个row key,只根据host查询。 虽然row key的首部是app id,导致我们必须遍历所有app id,但是在扫描一个app id下的所有row key时,通过fuzzy row filter,可以利用row key的全局分布式索引树(-ROOT-, .META, region ) 直接跳转到查询条件给定的host开始处进行扫描。因此,我们只需要为每个app id,从查询条件的host处开始扫描,共100次扫描。 系统配置类优化 HBase客户端优化——牺牲可靠性,提高日志写入的吞吐量 关闭WAL,直接写入日志。 适当增加writer buffer大小。 批量Put,传入List;关闭autoFlush。 压缩算法改用snappy,牺牲压缩率,降低CPU消耗,提高吞吐量。 调整HFile data block大小。data block越大,索引粒度越粗,顺序访问吞吐量越高。 在一个data block内部,通常只能顺序遍历,看我们搜索的Key是否存在。但是,也可以启用bloom filter,很快地告诉我们,一个Key是否一定不在这个data block中。 关闭某些column family的block cache缓存。 查询时,只有重复性的、随机的访问,才能命中block cache。如果某一个列只是用于海浪数据的顺序访问,那么对它缓存没有意义,相反,它能冲掉block cache本应该缓存的其他列的数据。对于这样的列, 应该关闭block cache缓存。 日志归档 * 写入HBase的日志,TTL设为7天。HBase用于实时的web查询,只能看这7天的日志。 这个系统有另外一路,实时写日志进HDFS,供HIVE分析。这是用于离线查询7天以前的历史日志的。 HBase默认存三个版本的cell,对日志来说没有必要,只需要存一个版本。 顺便提下与HBase无关的其他优化 通常我们会用先进先出的队列保存临时积压的日志。但是,在日志系统的场景中,当日志积压时,让用户看到最新写入的日志,比让用户看到历史日志更重要。因此我们用先进后出的栈,保存临时积压的日志。

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

网络结构设计——负载均衡学习笔记(一)

我自己用自己理解的一句话解释一下服务器负载均衡和服务器冗余技术的差别,这两个技术都是解决网站在大访问量的情况下仍然以快速度访问网站的技术(不喜勿喷)。 负载均衡 外部网络访问网页,路由器将访问量分别转至三台服务器上,即将访问量分担到不同的服务器设备上。 冗余技术 主服务器+备份服务器=服务器集群,每次访问都是访问的服务器集群上的主服务器,内容更改的话与备份服务器同步,当一个服务器集群的主服务器崩溃之后,备份服务器又充当主服务器。 自己理解中的OSI七层模型 应用层:FTP HTTP服务等 表示层:数据的形态,比如用什么样的编码 会话层:通信的时候通信状态->TCP(可靠),UDP(不可靠) 传输层:数据加上源端口的目的端口 网络层:数据加上源IP地址和目的IP地址 数据链路层:帧的加封和解封,这个封是源MAC地址和目的MAC地址 物理层:线,水晶头,这些都属于物理层 简单的总结一下,简短不割 负载均衡的实现可分为硬件和软件两部分,硬件的话话费可能比较大,软件的话总体上来说,怎一个好字了得,个人觉得的哈,但是看很多资料都说硬件比软件好,但是就是贵。在软件去设计的时候有微软Windows的技术,也有Linux的技术。硬件的话主要是通过路由器等设备去实现。 本文转自我爱物联网博客园博客,原文链接:http://www.cnblogs.com/yydcdut/p/3524226.html如需转载请自行联系原作者

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

Hadoop Pig学习笔记(一) 各种SQL在PIG中实现

我这里以Mysql 5.1.x为例,Pig的版本是0.8 同时我将数据放在了两个文件,存放在/tmp/data_file_1和/tmp/data_file_2中.文件内容如下: tmp_file_1: Txt代码 zhangsan 23 1 lisi 24 1 wangmazi 30 1 meinv 18 0 dama 55 0 zhangsan231 lisi241 wangmazi301 meinv180 dama550 tmp_file_2: Txt代码 1 a 23 bb 50 ccc 30 dddd 66 eeeee 1a 23bb 50ccc 30dddd 66eeeee 1.从文件导入数据 1)Mysql (Mysql需要先创建表). CREATE TABLE TMP_TABLE(USER VARCHAR(32),AGE INT,IS_MALE BOOLEAN); CREATE TABLE TMP_TABLE_2(AGE INT,OPTIONS VARCHAR(50)); -- 用于Join LOAD DATA LOCAL INFILE '/tmp/data_file_1' INTO TABLE TMP_TABLE ; LOAD DATA LOCAL INFILE '/tmp/data_file_2' INTO TABLE TMP_TABLE_2; 2)Pig tmp_table = LOAD '/tmp/data_file_1' USING PigStorage('\t') AS (user:chararray, age:int,is_male:int); tmp_table_2= LOAD '/tmp/data_file_2' USING PigStorage('\t') AS (age:int,options:chararray); 2.查询整张表 1)Mysql SELECT * FROM TMP_TABLE; 2)Pig DUMP tmp_table; 3. 查询前50行 1)Mysql SELECT * FROM TMP_TABLE LIMIT 50; 2)Pig tmp_table_limit = LIMIT tmp_table 50; DUMP tmp_table_limit; 4.查询某些列 1)Mysql SELECT USER FROM TMP_TABLE; 2)Pig tmp_table_user = FOREACH tmp_table GENERATE user; DUMP tmp_table_user; 5. 给列取别名 1)Mysql SELECT USER AS USER_NAME,AGE AS USER_AGE FROM TMP_TABLE; 2)Pig tmp_table_column_alias = FOREACH tmp_table GENERATE user AS user_name,age AS user_age; DUMP tmp_table_column_alias; 6.排序 1)Mysql SELECT * FROM TMP_TABLE ORDER BY AGE; 2)Pig tmp_table_order = ORDER tmp_table BY age ASC; DUMP tmp_table_order; 7.条件查询 1)Mysql SELECT * FROM TMP_TABLE WHERE AGE>20; 2) Pig tmp_table_where = FILTER tmp_table by age > 20; DUMP tmp_table_where; 8.内连接Inner Join 1)Mysql SELECT * FROM TMP_TABLE A JOIN TMP_TABLE_2 B ON A.AGE=B.AGE; 2)Pig tmp_table_inner_join = JOIN tmp_table BY age,tmp_table_2 BY age; DUMP tmp_table_inner_join; 9.左连接Left Join 1)Mysql SELECT * FROM TMP_TABLE A LEFT JOIN TMP_TABLE_2 B ON A.AGE=B.AGE; 2)Pig tmp_table_left_join = JOIN tmp_table BY age LEFT OUTER,tmp_table_2 BY age; DUMP tmp_table_left_join; 10.右连接Right Join 1)Mysql SELECT * FROM TMP_TABLE A RIGHT JOIN TMP_TABLE_2 B ON A.AGE=B.AGE; 2)Pig tmp_table_right_join = JOIN tmp_table BY age RIGHT OUTER,tmp_table_2 BY age; DUMP tmp_table_right_join; 11.全连接Full Join 1)Mysql SELECT * FROM TMP_TABLE A JOIN TMP_TABLE_2 B ON A.AGE=B.AGE UNION SELECT * FROM TMP_TABLE A LEFT JOIN TMP_TABLE_2 B ON A.AGE=B.AGE UNION SELECT * FROM TMP_TABLE A RIGHT JOIN TMP_TABLE_2 B ON A.AGE=B.AGE; 2)Pig tmp_table_full_join = JOIN tmp_table BY age FULL OUTER,tmp_table_2 BY age; DUMP tmp_table_full_join; 12.同时对多张表交叉查询 1)Mysql SELECT * FROM TMP_TABLE,TMP_TABLE_2; 2)Pig tmp_table_cross = CROSS tmp_table,tmp_table_2; DUMP tmp_table_cross; 13.分组GROUP BY 1)Mysql SELECT * FROM TMP_TABLE GROUP BY IS_MALE; 2)Pig tmp_table_group = GROUP tmp_table BY is_male; DUMP tmp_table_group; 14.分组并统计 1)Mysql SELECT IS_MALE,COUNT(*) FROM TMP_TABLE GROUP BY IS_MALE; 2)Pig tmp_table_group_count = GROUP tmp_table BY is_male; tmp_table_group_count = FOREACH tmp_table_group_count GENERATE group,COUNT($1); DUMP tmp_table_group_count; 15.查询去重DISTINCT 1)MYSQL SELECT DISTINCT IS_MALE FROM TMP_TABLE; 2)Pig tmp_table_distinct = FOREACH tmp_table GENERATE is_male; tmp_table_distinct = DISTINCT tmp_table_distinct; DUMP tmp_table_distinct; 本文作者:佚名 来源:51CTO

资源下载

更多资源
优质分享App

优质分享App

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Mario

Mario

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

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

用户登录
用户注册