paulwong

#

MongoDB 固定集合(Capped Collections)

MongoDB 固定集合(Capped Collections)是性能出色且有着固定大小的集合,对于大小固定,我们可以想象其就像一个环形队列,当集合空间用完后,再插入的元素就会覆盖最初始的头部的元素!


创建固定集合

我们通过createCollection来创建一个固定集合,且capped选项设置为true:

>db.createCollection("cappedLogCollection",{capped:true,size:10000})

还可以指定文档个数,加上max:1000属性:

>db.createCollection("cappedLogCollection",{capped:true,size:10000,max:1000})

判断集合是否为固定集合:

>db.cappedLogCollection.isCapped()

如果需要将已存在的集合转换为固定集合可以使用以下命令:

>db.runCommand({"convertToCapped":"posts",size:10000})

以上代码将我们已存在的 posts 集合转换为固定集合。


固定集合查询

固定集合文档按照插入顺序储存的,默认情况下查询就是按照插入顺序返回的,也可以使用$natural调整返回顺序。

>db.cappedLogCollection.find().sort({$natural:-1})

固定集合的功能特点

可以插入及更新,但更新不能超出collection的大小,否则更新失败,不允许删除,但是可以调用drop()删除集合中的所有行,但是drop后需要显式地重建集合。

在32位机子上一个cappped collection的最大值约为482.5M,64位上只受系统文件大小的限制。


固定集合属性及用法

属性

  • 属性1:对固定集合进行插入速度极快
  • 属性2:按照插入顺序的查询输出速度极快
  • 属性3:能够在插入最新数据时,淘汰最早的数据

用法

  • 用法1:储存日志信息
  • 用法2:缓存一些少量的文档

posted @ 2015-12-09 14:41 paulwong 阅读(457) | 评论 (0)编辑 收藏

MongoDB 聚合

http://www.runoob.com/mongodb/mongodb-aggregate.html
MongoDB中聚合(aggregate)主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果。有点类似sql语句中的 count(*)。


aggregate() 方法

MongoDB中聚合的方法使用aggregate()。

语法

aggregate() 方法的基本语法格式如下所示:

>db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)

实例

集合中的数据如下:

{    _id: ObjectId(7df78ad8902c)    title: 'MongoDB Overview',     description: 'MongoDB is no sql database',    by_user: 'w3cschool.cc',    url: 'http://www.w3cschool.cc',    tags: ['mongodb', 'database', 'NoSQL'],    likes: 100 }, {    _id: ObjectId(7df78ad8902d)    title: 'NoSQL Overview',     description: 'No sql database is very fast',    by_user: 'w3cschool.cc',    url: 'http://www.w3cschool.cc',    tags: ['mongodb', 'database', 'NoSQL'],    likes: 10 }, {    _id: ObjectId(7df78ad8902e)    title: 'Neo4j Overview',     description: 'Neo4j is no sql database',    by_user: 'Neo4j',    url: 'http://www.neo4j.com',    tags: ['neo4j', 'database', 'NoSQL'],    likes: 750 },

现在我们通过以上集合计算每个作者所写的文章数,使用aggregate()计算结果如下:

> db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : 1}}}]) { "result" : [ { "_id" : "w3cschool.cc", "num_tutorial" : 2 }, { "_id" : "Neo4j", "num_tutorial" : 1 } ], "ok" : 1 } >

以上实例类似sql语句: select by_user, count(*) from mycol group by by_user

在上面的例子中,我们通过字段by_user字段对数据进行分组,并计算by_user字段相同值的总和。

下表展示了一些聚合的表达式:

表达式描述实例
$sum计算总和。db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : "$likes"}}}])
$avg计算平均值db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$avg : "$likes"}}}])
$min获取集合中所有文档对应值得最小值。db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$min : "$likes"}}}])
$max获取集合中所有文档对应值得最大值。db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$max : "$likes"}}}])
$push在结果文档中插入值到一个数组中。db.mycol.aggregate([{$group : {_id : "$by_user", url : {$push: "$url"}}}])
$addToSet在结果文档中插入值到一个数组中,但不创建副本。db.mycol.aggregate([{$group : {_id : "$by_user", url : {$addToSet : "$url"}}}])
$first根据资源文档的排序获取第一个文档数据。db.mycol.aggregate([{$group : {_id : "$by_user", first_url : {$first : "$url"}}}])
$last根据资源文档的排序获取最后一个文档数据db.mycol.aggregate([{$group : {_id : "$by_user", last_url : {$last : "$url"}}}])

管道的概念

管道在Unix和Linux中一般用于将当前命令的输出结果作为下一个命令的参数。

MongoDB的聚合管道将MongoDB文档在一个管道处理完毕后将结果传递给下一个管道处理。管道操作是可以重复的。

表达式:处理输入文档并输出。表达式是无状态的,只能用于计算当前聚合管道的文档,不能处理其它的文档。

这里我们介绍一下聚合框架中常用的几个操作:

  • $project:修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档。
  • $match:用于过滤数据,只输出符合条件的文档。$match使用MongoDB的标准查询操作。
  • $limit:用来限制MongoDB聚合管道返回的文档数。
  • $skip:在聚合管道中跳过指定数量的文档,并返回余下的文档。
  • $unwind:将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值。
  • $group:将集合中的文档分组,可用于统计结果。
  • $sort:将输入文档排序后输出。
  • $geoNear:输出接近某一地理位置的有序文档。

管道操作符实例

1、$project实例

db.article.aggregate( { $project : {         title : 1 ,         author : 1 , }} );

这样的话结果中就只还有_id,tilte和author三个字段了,默认情况下_id字段是被包含的,如果要想不包含_id话可以这样:

db.article.aggregate( { $project : {         _id : 0 ,         title : 1 ,         author : 1 }});

2.$match实例

db.articles.aggregate( [ { $match : { score : { $gt : 70, $lte : 90 } } }, { $group: { _id: null, count: { $sum: 1 } } } ] );

$match用于获取分数大于70小于或等于90记录,然后将符合条件的记录送到下一阶段$group管道操作符进行处理。

3.$skip实例

db.article.aggregate( { $skip : 5 }); 

经过$skip管道操作符处理后,前五个文档被"过滤"掉。

posted @ 2015-12-08 10:44 paulwong 阅读(538) | 评论 (0)编辑 收藏

Java 中正确使用 hashCode 和 equals 方法

     摘要: 在这篇文章中,我将告诉大家我对hashCode和equals方法的理解。我将讨论他们的默认实现,以及如何正确的重写他们。我也将使用Apache Commons提供的工具包做一个实现。 目录:hashCode()和equals()的用法重写默认实现使用Apache Commons Lang包重写hashCode()和equals()需要注意记住的事情当使用ORM的时候特别要注意的hashC...  阅读全文

posted @ 2015-12-01 10:52 paulwong 阅读(414) | 评论 (0)编辑 收藏

SAMSUNG NOTE2双清教程

双清教程:

  1. 手机关机,按住音量上+HOME+电源键
  2. 选择 wipe date/factory reset
  3. 选择 yes dalete all user data
  4. 选择 wipe cache partition
  5. 选择 yes wipe cache




posted @ 2015-11-26 19:27 paulwong 阅读(425) | 评论 (0)编辑 收藏

如何医治牙龈出血

如何医治牙龈出血啊。。。谢谢啊,狂急!!!!
悬赏分:0 - 解决时间:2005-11-22 12:37
提问者: 小哈纳斯 - 魔法学徒 一级 

http://www.234.com.tw/perio/topicList.cfm?kid=61

最佳答案
这里是我以前答复两个患者的资料,对你有作用:

一 关于青年人牙龈出血

⑴ 我想你是牙龈出血。若是其它原因出血,你肯定早住医院而不会在这里轻松发贴了。

⑵ 这个臭味是来自血的腐败。既然牙龈会出血,也表明你有牙周的问题,这些渗血部位的牙垢及食物残渣也会发出难闻的气味。

⑶ 治疗一般应到专门的口腔门诊。看来你是第一次涉及口腔的保健,治疗的流程应该是这样的:

   先消除炎症:常规是口服利菌沙,灭滴灵,维生素C,维生素K。治疗约1周后,牙龈炎症消除,就应着手解决根本问题了。

   再清除牙垢:这是引起牙周炎的原因。牙垢很硬,堆积在牙龈周围,不断地刺激和损伤着牙龈,使成创面出血。而出血又可进一步形成牙垢,如此成恶性循环。

⑷ 在我们三甲医院,这个费用偏高些,约100元。它包括消炎和约两次的除垢(洗牙)。在县市级的医院应该便宜些。

⑸ 消炎7天加除垢2天。若同时治疗龋齿,还加2天。

⑹ 当然,你也可只做消炎一步,除垢待以后有时间再做。如此,你到大的药房去,买前3种药自己服。买3-5天的量。约花20元。

⑹ 这3-5天内,你要睡眠良好,尽量避免感冒发热,那会引起血管通透性趋增,使出血严重一些,不利于治疗消炎。

⑺ 平时多食富含维生素C的水果蔬菜很重要!!!
好,暂就说这么多。对顽固性的牙龈出血(例如出了多年血),或是这样治疗仍不见效,请再设问,我们来为你确定新的治疗方案。

二 关于老是治不好的牙龈出血(先用一法!!!!)

楼上解释的对。但我要教你最重要的东西,就是怎样解决这个问题。当然,解决之后,你要补我的专家号,呵呵。(我有个熟人有40年牙龈出血的经历,可是它近年突然好了。你想知道原因吗?我给了他一个新招。)


   ⑴ 连服维生素C7天,每天100-300mg。(这个量不算多,意义你明白。)

   ⑵ 这7天内保持好睡眠,目的是调节好人的生理状态,使不容易感冒什么的,避免因发烧造成的微血管通透性能趋增,使容易出血。

   ⑶ 本条最重要:去药房买“阿奇霉素分散片”,买大厂出的,我建议买天津药业悦来牌的。每盒6片×0.25g,请单次口服4片,并详细阅读一下说明书。记住:只吃一次即可。若有严重的不良反应(极少有!!),带着这个药的说明书去看门诊,医生会处置。如果没有不良反应,可在48小时后把另2片吃了,仅此而已。

   该药是目前极有名的药,4年前从国外进来现已完全本土化,真的是国外科学家对人类的大贡献!也不算贵,约20-30元1盒6片。主要用途是对付非淋菌性性病。

   它是广谱抗菌药,更是☆靶向制剂☆。你明白这个吗?我说个白话以便你能听懂:这个药可跟随人的巨嗜细胞走。而巨嗜细胞又跟着炎症走,所以疗效显著。

   ⑷ 一般的牙科医生,都会建议你用利君沙和灭滴灵,外加维生素C和K。但我想你是老牙龈出血,这种药用过多次,不会太奏效,阿奇霉素毒副作用比上述两种都小,更重要的是你没用过,致病菌没有抗药性。

   ⑸ 炎症消除、出血停止之后,建议你去做一次牙垢清除。多年的出血肯定会导致牙根周围有比较多的牙垢,这些牙垢年复一年刺激着周围的牙龈,不但是细菌的温床,也使牙龈面持续受到创伤,牙龈出血还会卷土重来。

   ⑹ 此次牙龈炎症消除之后,口腔气味也会比以前好转,但牙根的一部分将暴露的比以前利害(以前被肿胀的牙龈包裹),产生龋齿的可能性将增加。因此要注意好口腔清洁。

回答者: ccd2093 - 举人 四级 11-14 08:51
提问者对于答案的评价:
非常感谢~~

posted @ 2015-11-19 08:47 paulwong 阅读(370) | 评论 (0)编辑 收藏

javax.crypto.IllegalBlockSizeException: Data must not be longer than 256 bytes 解决办法

如果用RSA加密数据的话,会有数据长度的要求,否则会抛异常:
javax.crypto.IllegalBlockSizeException: Data must not be longer than 256 bytes

推荐的做法:

  1. 随机生成一个密钥,用作对称密钥UUID
  2. 用此对称密钥,用对称加密法AES加密数据
  3. 用RSA的公钥加密此对称密钥
  4. 发送加密后的对称密钥和加密数据
  5. 用RSA私钥解密加密后的对称密钥
  6. 用解密密后的对称密钥,解密数据
  7. 完成
AESSecurityUtil.java
import java.security.Key;
import java.util.UUID;

import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

public class AESSecurityUtil {

    // 加密算法
    /** 指定加密算法为RSA */
    private static final String ALGORITHM = "AES";

    // 加密密钥
    
// private static final byte[] keyValue = new byte[] { 'T', 'h', 'e',
    
// 'B','e', 's', 't', 'S', 'e', 'c', 'r', 'e', 't', 'K', 'e', 'y' };
    
// 16位的加密密钥
//    private byte[] keyValue;

    /**
     * 用来进行加密的操作
     * 
     * 
@param Data
     * 
@return
     * 
@throws Exception
     
*/
    public static String encrypt(String keyString, String data)
            throws Exception {
        Key key = generateKey(keyString);
        Cipher c = Cipher.getInstance(ALGORITHM);
        c.init(Cipher.ENCRYPT_MODE, key);
        byte[] encVal = c.doFinal(data.getBytes());
        String encryptedValue = new BASE64Encoder().encode(encVal);
        return encryptedValue;
    }

    /**
     * 用来进行解密的操作
     * 
     * 
@param encryptedData
     * 
@return
     * 
@throws Exception
     
*/
    public static String decrypt(String keyString, String encryptedData) throws Exception {
        Key key = generateKey(keyString);
        Cipher c = Cipher.getInstance(ALGORITHM);
        c.init(Cipher.DECRYPT_MODE, key);
        byte[] decordedValue = new BASE64Decoder().decodeBuffer(encryptedData);
        byte[] decValue = c.doFinal(decordedValue);
        String decryptedValue = new String(decValue);
        return decryptedValue;
    }
    
    public static String generateKeyString()
    {
        //必须长度为16
        return UUID.randomUUID().toString().replaceAll("-", "").substring(0, 16);
    }

    /**
     * 根据密钥和算法生成Key
     * 
     * 
@return
     * 
@throws Exception
     
*/
    private static Key generateKey(String keyString) throws Exception {
        Key key = new SecretKeySpec(keyString.getBytes(), ALGORITHM);
        return key;
    }
    
    public static void main(String [] args) throws Exception
    {
        String keyString = generateKeyString();
//        String keyString = "1234567890123456";
        System.out.println("密钥:" + keyString);
        
        String source = "恭喜发财!";// 要加密的字符串
        System.out.println("准备用密钥加密的字符串为:" + source);
        
        String cryptograph = encrypt(keyString, source);// 生成的密文
        System.out.print("用密钥加密后的结果为:" + cryptograph);
        System.out.println();

        String target = decrypt(keyString, cryptograph);// 解密密文
        System.out.println("用密钥解密后的字符串为:" + target);
        System.out.println();
    }

}


CryptoUtil.java
import com.tcl.project7.boss.common.crypto.CryptoData;
import com.tcl.project7.boss.common.util.JsonManager;
import com.tcl.project7.boss.common.util.file.FileUtil;
import com.tcl.project7.boss.gameapplication.yearendactivities.bigwheelgame.player.valueobject.BigWheelGameRequest;

public class CryptoUtil {
    
    public static CryptoData encrypt(String data) throws Exception
    {
        //1、产生AES密钥
        String keyString = AESSecurityUtil.generateKeyString();
        
        //2、用AES法加密数据
        String cryptograph = AESSecurityUtil.encrypt(keyString, data);
        
        //3、用RSA加密AES密钥
        String finalKey = RSASecurityUtil.encrypt(keyString);
//        System.out.print("用RSA加密AES密钥为:" + finalKey);
//        System.out.print("加密数据:" + cryptograph);
        
        CryptoData cryptoData = new CryptoData();
        cryptoData.setKey(finalKey);
        cryptoData.setContent(cryptograph);
        
        //4、返回数据
        return cryptoData;
    }
    
    public static String decrypt(String keyString, String data) throws Exception
    {
        //1、解密密钥
        String decryptKeyString = RSASecurityUtil.decrypt(keyString);
        
        //2、解密内容
        String decryptData = AESSecurityUtil.decrypt(decryptKeyString, data);
        
        //3、返回
        return decryptData;
        
    }
    
    public static void main(String [] args) throws Exception
    {
        String aFilePath = "DATA/TESTING-FILE/TOCRYPTO/tocrypto.txt";
        String source = FileUtil.getContents(aFilePath);
        
        CryptoData cryptoData = encrypt(source);
        System.out.print(cryptoData);
        
        String target = decrypt(cryptoData.getKey(), cryptoData.getContent());
        System.out.print(target);
        
        BigWheelGameRequest bigWheelGameRequest = JsonManager.getBean(target, BigWheelGameRequest.class);
        System.out.print(bigWheelGameRequest);
    }

}


CryptoData.java
import java.io.Serializable;

public class CryptoData implements Serializable{

    private static final long serialVersionUID = -4774469372648172844L;
    
    private String key;
    
    private String content;

    public String getKey() {
        return key;
    }

    public void setKey(String key) {
        this.key = key;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

    public String toString() {
        return "CryptoData [key=" + key + ", content=" + content + "]";
    }

}

posted @ 2015-11-18 15:27 paulwong 阅读(14636) | 评论 (0)编辑 收藏

JSON转JAVA BEAN


import java.io.IOException;

import org.codehaus.jackson.JsonParseException;
import org.codehaus.jackson.map.DeserializationConfig;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.type.TypeReference;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;


public class ColumnControllerTest {
    
    private Logger logger = LoggerFactory.getLogger(ColumnControllerTest.class);
    
    
    @Test
    public void testTest()
    {
        ObjectMapper mapper = new ObjectMapper();
        /*AnnotationIntrospector introspector = new JaxbAnnotationIntrospector();
        // make deserializer use JAXB annotations (only)
        mapper.getDeserializationConfig().setAnnotationIntrospector(introspector);
        // make serializer use JAXB annotations (only)
        mapper.getSerializationConfig().setAnnotationIntrospector(introspector);
*/
        mapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);
        
        String userStr = "{\"username\":\"paul\",\"email\":\"paul@paul.com\"}";
        try {
            TypeReference<TestUser> temp = new TypeReference<TestUser>(){};
            TestUser testUser = mapper.readValue(userStr, temp);
            System.out.println(testUser.toString());
            
            String result = mapper.writeValueAsString(testUser);
            System.out.println(result);
            
        } catch (JsonParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (JsonMappingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}

posted @ 2015-11-18 13:30 paulwong 阅读(453) | 评论 (0)编辑 收藏

不得不承认Zeroc Ice是RPC王者: 完爆Dubbo,Thrift,谷歌RPC

     摘要: ice-dubbo-thrift-grpc性能测试对比,本次测试过程中还发现了一个支付宝的秘密,附件文档中会详细说明。测试说明    本测试只是个人为了对rpc进行技术选型,测试可能不够严谨,对某些rpc的参数可能也不是最优,如果你知道更优的参数配置或者改进意见等,欢迎反馈给我magicdoom@gmail.com。另外代码有些地方只是为了测试方便,不作为平时编程的范例。所有测...  阅读全文

posted @ 2015-11-13 16:19 paulwong 阅读(14176) | 评论 (2)编辑 收藏

Tengine

简介

Tengine是由淘宝网发起的Web服务器项目。它在Nginx的基础上,针对大访问量网站
的需求,添加了很多高级功能和特性。Tengine的性能和稳定性已经在大型的网站如
淘宝网天猫商城等得到了很好的检验。它的最终目标是打造一个高效、稳定、安全、
易用的Web平台。

从2011年12月开始,Tengine成为一个开源项目,Tengine团队在积极地开发和维护
着它。Tengine团队的核心成员来自于淘宝搜狗等互联网企业。Tengine是社区合作
的成果,我们欢迎大家参与其中,贡献自己的力量。

特性

动态

邮件列表

posted @ 2015-11-06 12:56 paulwong 阅读(446) | 评论 (0)编辑 收藏

SPRING IO

Spring起初只专注ioc和aop,现在已发展成一个庞大体系。比如security、mvc等。
如此一来,不同模块或者与外部进行集成时,依赖处理就需要各自对应版本号。
比如,较新spring与较老的quartz,它们集成就会遇到问题,给搭建和升级带来不便。

因此Spring IO Platform应运而生,只要项目中引入了它,外部集成时依赖关系无需版本号

<dependency>
 <groupId>org.springframework</groupId>
 <artifactId>spring-core</artifactId> 
</dependency>

Spring IO Platform只是一个pom文件,记录了spring与其他开源项目对应的版本。
省去了版本号,也就省去了处理依赖时的问题,因为Spring IO Platform中有最优的版本。

posted @ 2015-10-30 14:05 paulwong 阅读(479) | 评论 (0)编辑 收藏

仅列出标题
共112页: First 上一页 29 30 31 32 33 34 35 36 37 下一页 Last