
2020年01月
请参考 http://jinnianshilongnian.iteye.com/blog/1423971 或 https://github.com/zhangkaitao/es
SELECT name, SUM(DECODE(jbName, '事假', kjTs, 0)) "事假", SUM(DECODE(jbName, '年假', kjTs, 0)) "年假", SUM(DECODE(jbName, '调休', kjTs, 0)) "调休", SUM(DECODE(jbName, '婚假', kjTs, 0)) "婚假" FROM temp GROUP BY name;
[+-]?\d{1,18}(?:.\d{1,8})?
java版:"[+-]?\d{1,18}(?:\.\d{1,8})?"
还可能设置X-Real-IP http://relistan.com/http-header-hell-starring-x-real-ip-and-x-forwarded-for/
一般对于大数据的读写操作,都会有一个cache层作为缓冲。一般选用cache的话,会用memcached或redis(还有一个阿里的cache)。然后再加上读写分离的策略。只要保证操作不会穿透cache,就没有什么问题。
当然是用cache的话,你要预估你的全部数据量或热数据量。预算好你的cache命中率。
你这里说道你们操作的集合数据,那选用redis就很不错了。redis本身就支持集合的操作。
最后一步就是cache中数据与持久数据的同步问题,这个你也是需要考虑的。
当然你说的你的数据要做汇集工作,这个就不是cache所不具备的功能了。redis支持服务端计算,如果的key设计的合理的话,估计也能解决你的数据汇集问题。
线程中出现内存泄漏而已,一旦发生导致你的线程挂掉,然后jvm自行gc,所以你看到jvm内存正常。 一般是你在线程中申请了过大的内存引起的。
特别注意集合类的扩容过程,可能就是发生在这里。
是excel2007吗 如果是试试 SXSSFWorkbook .setCompressTempFiles(true); 压缩下
好的,大白话就是: 1、一个系统可以搞定的事情,改由多个系统配合才能搞定。你比如说电子商城,你可以将他设计为一个独立系统,即前台页面、处理业务逻辑的service、数据库访问,用你的ssh搞定,如果设计成分布式系统,那就是一个前台系统+多个后台业务系统。好处很多,将业务系统进行服务化,可以做集群部署,提供系统性能。其他的好处不写了,你看看这个帖子http://www.iteye.com/topic/1131120 2、javaee可以采用webservice、restful、corba这些分布式技术实现分布式系统的设计,也就是完成前台系统和后台系统的通信或者是调用。多个异构系统是区别于独立系统的唯一特征。 3、前台开发前台的,后台开发后台的,前台就是一个web系统,可以用ssh。后台是一个业务系统,可以使用java也可以使用别的语言。基本上就是ssh可以开发分布式系统的每个系统。 4、你往进钻研就行了,凭你的努力没有攻无不克的难点
首先说一点,使用外键是为什么?
外键的使用时为了在数据库的层级保证数据的一致性,完整性,更可靠。毕竟使用程序来控制的话,对于程序员的要求是比较高的。
然后再说应用场景: 追求的数据的完整性等,那就用上外键吧。毕竟不可控的因素太多了,还不如让数据库自己来保证。如果数据库都保证不了,那就game over啦。
追求性能,而且是在大数据量的频繁更新操作下。那就让外键去见鬼吧,这个时候外键还存在,不是完全的捣蛋吗?插入一条数据由于外键的存在还要去做一次一致性约束检测,这不是在浪费时间吗?所以在这种条件下,外键就有点不太实用了。
当然你的数据量不大,那么你使用外键是没有问题的(数据量不大也不需要考虑高速写入的问题了 )
所以说,这是一个权衡,看你用想要什么。
参考:http://www.dewen.org/q/1814/mysql+%E5%A4%96%E9%94%AE%E9%97%AE%E9%A2%98
题外话:如果你要高速写入大数据量,就不要用关系型数据库了,这个解决起来有点麻烦。现在不是NOSQL很火吗,看看这个吧。呵呵
对于这种大数据量的更新情况,可以采用多线程的方式,每个线程更新100条数据,这样就能提高更新的速度了
当然这里的100只是一个猜想值,哪个值合适,需要你测试才能得出。我想的话,应该能比单线要快些,至于能不能优化到2s,这个就不清楚了
同时需要注意你的连接池大小、线程池大小(核心线程数)。这些资源也会影响到你的更新速度(即这些资源不能出现竞争)
最后,我对你需要更新这么大的数据量操作有一些疑问: 这个操作是online的吗? 这个操作的返回是实时的吗?
对于大数据量的更新一般会做成一个异步的操作,而不需要是实时的
个人判断应该是一种策略,帮你把hql语句根据orm映射的关系,将对象名转换成表名,拼装成所连接的数据库的最合理的sql语句,执行查询,再进行对象封装。所以当你配置了显示sql时,是可以看到hibernate翻译过的sql语句的,将映射的字段都罗列出来,级联表做级联查询。 各个数据的查询语句略有不同,储存布尔值或者其他的字段类型的方式也不完全一样,hibernate帮你把这些不一样进行统一化,你不用关注具体的数据库的sql,只需要关注hql,并且使得操作表数据结果集变成直接操作对象的结果集,比较方便。 有人质疑hibernate的查询效率,其实撇开存储过程,单单查询表而言,效率几乎一样的。大数据量后才会有点差异。
你的本地应用与容器分别运行在不同的虚拟机里,是不能直接互相访问对方的内部对象的。而且在容器内部,FacesContext实例是在Request Scope的(每个请求处理线程都有独立的FacesContext实例),你必须通过访问FacesServlet去创建出实例。
综上,你没办法在本地应用里直接访问容器里的FacesContext。但如果你知道需要获取什么信息,可以在容器上用某种方法(暴露WebService或RestFul API 或最简单的通过普通http响应)通过http协议返回你需要的数据。
例如,你可以写个页面 get-my-info.xhtml,里面只放一行代码 #{myInfoBean.returnInfo} 然后在你的myInfoBean的returnInfo方法中:
public String returnInfo() {
final String json = “。。。” //取到你需要的Managed Bean,把你需要的信息拼成JSON
final FacesContext facesContext = FacesContext.getCurrentInstance();
final Object response = facesContext.getExternalContext().getResponse();
if (response instanceof HttpServletResponse) {
final HttpServletResponse httpResponse = (HttpServletResponse) response;
final PrintWriter writer = httpResponse.getWriter();
writer.append(json);
httpResponse.setStatus(200);
facesContext.responseComplete();
}
return null;
}
然后在你的本地应用里用HttpClient ( http://hc.apache.org/httpclient-3.x/ )之类的客户端包访问get-my-info.jsf,就能取到你在容器端拼出来的json信息。
两种实现 第一种:先读另一张表的3条数据,然后保存成页面临时变量,然后加载列表的20条数据。然后在store.load方法里面写回调函数,根据id或者其他字段相等把这3条数据对应的数据选中。 第二种:你改下后台的读20条数据的sql,直接在输出的json里面加上一个字段,就是另一张表的id之类的东西,然后页面在load之后的回调里面判断每个record的这个字段是不是为空,不为空则选中。 PS:load的回调函数也可以使用store的load监听事件,效果是一样的
我觉得还是用伪代码表示比较方便:
1. scan thread: List<String> col_a_list = get col_a record from db
scan thread: stop;
for (String col_a: col_a_list) {
int time = getTime(col_a);//get time based on col_a
startTimer(time, new WebServiceThread());
update db record of col_a to tell make it not eligible for the scan thread.
}
2. WebServiceThread:
If success {
update db record of col_a to tell make it not eligible for the scan thread.
} else if (col_a == 4) {
update db record of col_a to tell make it not eligible for the scan thread.
} else {
update col_a = col_a + 1;
}
String s = "Tue Jul 16 12:12:12 CST 2013";
SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy", Locale.ENGLISH);
try {
Date date = sdf.parse(s);
String result = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss").format(date);
System.out.println(result);
} catch (ParseException e) {
}
楼上的方法会产生时差,date其实已经弃用了哪个构造了
Mongodb不支持事务,但是还是有些命令保持 原子性的 Mongodb 官方文档有一个示例,你可以看看的,下面是例子地址 http://docs.mongodb.org/manual/tutorial/perform-two-phase-commits/
我们是这样弄的: (1)异常分类: 业务类的异常(系统给出提示可以指导用户):用实际的业务异常对应的信息提示用户; 系统异常:把异常信息记录日志,并提示用户系统出现错误,请与系统管理员联系;系统管理员收到用户反馈立刻查看日志协助处理用户问题 (2)提示信息的格式,可以采用消息模版+参数的形式; 类似于: getMsg(消息编号,{},{})这种形式,在一定程度上应该可以规范系统的提示信息的基本格式;
这是标准的json格式啊,直接转换就好了 var qe_123={rank:["d","b"],pages:2}; var data = eval(qe_123); var array = data.rank; alert(array + " " + data.pages);
请参考 http://jinnianshilongnian.iteye.com/blog/1423971 或 https://github.com/zhangkaitao/es
SELECT name, SUM(DECODE(jbName, '事假', kjTs, 0)) "事假", SUM(DECODE(jbName, '年假', kjTs, 0)) "年假", SUM(DECODE(jbName, '调休', kjTs, 0)) "调休", SUM(DECODE(jbName, '婚假', kjTs, 0)) "婚假" FROM temp GROUP BY name;
这个说明你的客服端能够收到信息,,服务器端要求同时处理3条信息才能发送,这个应该是服务端的问题,,在数据接收和传送有问题
count(用户id) group by 渠道商id
[+-]?\d{1,18}(?:.\d{1,8})?
java版:"[+-]?\d{1,18}(?:\.\d{1,8})?"
你的每条值应该都有编号,根据这个编号把值查询到,然后再渲染到修改页面即可。
还可能设置X-Real-IP http://relistan.com/http-header-hell-starring-x-real-ip-and-x-forwarded-for/
#request.user.id
一般对于大数据的读写操作,都会有一个cache层作为缓冲。一般选用cache的话,会用memcached或redis(还有一个阿里的cache)。然后再加上读写分离的策略。只要保证操作不会穿透cache,就没有什么问题。
当然是用cache的话,你要预估你的全部数据量或热数据量。预算好你的cache命中率。
你这里说道你们操作的集合数据,那选用redis就很不错了。redis本身就支持集合的操作。
最后一步就是cache中数据与持久数据的同步问题,这个你也是需要考虑的。
当然你说的你的数据要做汇集工作,这个就不是cache所不具备的功能了。redis支持服务端计算,如果的key设计的合理的话,估计也能解决你的数据汇集问题。
线程中出现内存泄漏而已,一旦发生导致你的线程挂掉,然后jvm自行gc,所以你看到jvm内存正常。 一般是你在线程中申请了过大的内存引起的。
特别注意集合类的扩容过程,可能就是发生在这里。