mongodb + spring data一起使用时,bean的id应该用什么类型?

mongodb + spring data一起使用时,bean的id应该用什么类型? 在插入bean时我不会设置id的值,而是让mongodb/spring data把生成的_id塞进来。 用原子类型long, int 会有问题;不设置值时,值就是0, mongodb会认为你传的_id值为0. 第一条记录以_id=0插入成功后,插入第二条_id=0的记录时,系统会报键重复的异常。 用Long, Integer行不行? 也不行,因为Spring Data没有内置这样的转换。 正确答案是:String或BigInteger, Spring Data默认只支持这两种类型。参见:ObjectIdToBigIntegerConverter 和 ObjectIdToStringConverter .  或者你可以自定义一个converter, 但我没有去验证。

mongodb出的nosql数据库选型方案

http://www.mongodb.com/lp/whitepaper/nosql-considerations 有自吹的嫌疑,但仍然很有参考价值 ========== 摘抄一段使用nosql的三个动机: (1)In some cases the motivation is technical — such as a need to scale or perform beyond the capabilities of their existing systems — (2)while in other cases companies are driven by the desire to identify viable alternatives to expensive proprietary software. (3)A third motivation is agility or speed of development, …

mongodb出的nosql数据库选型方案 Read More »

代码片断: sql + java实现数据库某字段的原子递增

“update t set v = v + 1 where id = 1”  这个语句可以用于数据库某字段值的递增,但在并发情况下,它很容易造成”丢失修改“。要解决这个问题,一般要用乐观锁。 下面是我最近在项目中使用的做法: –使用cas风格 update t set v = #newValue# where id = 1 and v = #currentValue# //乐观锁+重试机制,如果重试了一定次数还未成功,则抛出 IllegalStateException public void increaseValue(long id) throws IllegalStateException { //如果cas失败,则继续执行,直到100遍 for (int i = 0; i < 100; i++) { int currentValue = getValueById(id, topicName); if …

代码片断: sql + java实现数据库某字段的原子递增 Read More »

压力测试中几种不同的”压力“

1. 请求的数据量大小(字节数) 2. 每秒请求数    a. 短连接应用:不必多说    b. 长连接应用:大量连接建立请求 3. 在线数    a. 短连接应用:Session数    b. 长连接应用:维持的长连接数(socket数) 4. 留存数据量: 数据库里已有的数据量 待续。。。

消息中间件可能重发消息,怎么办?

消息中间件可能重发消息,怎么办?只能要求客户端保证幂等性了。 但这又增加了客户端的复杂性,人家可能不愿意。 其实解决办法很简单(也很流氓),你自己做个客户端SDK,在这里面做好消息去重,然后让你的客户集成它就是了。