听了MongoDB表现这么多好事后,我们决定让Mongodb尝试解决我们遇到的问题.我开始将我们在几个mysql数据库中的所有记录移动到mongodb中的单个集合.这导致了一个包含2900万个文档的集合(每个文档至少有20个字段),在HD中占用大约100 GB的空间.我们决定将它们全部放在一个集合中,因为所有文档都具有相同的结构,我们想要查询并汇总所有这些文档的结果.
我创建了一些索引以匹配我的查询,否则即使简单的count()也需要很长时间.但是,诸如distinct()和group()之类的查询仍然需要太长时间.
例:
// creation of a compound index
db.collection.ensureIndex({'metadata.system':1, 'metadata.company':1})
// query to get all the combinations companies and systems
db.collection.group({key: { 'metadata.system':true, 'metadata.company':true }, reduce: function(obj,prev) {}, initial: {} });
Run Code Online (Sandbox Code Playgroud)
我看了一下mongod日志,它有很多像这样的行(在执行上面的查询时):
Thu Apr 8 14:40:05 getmore database.collection cid:973023491046432059 ntoreturn:0 query: {} bytes:1048890 nreturned:417 154ms
Thu Apr 8 14:40:08 getmore database.collection cid:973023491046432059 ntoreturn:0 query: {} bytes:1050205 nreturned:414 430ms
Thu Apr 8 14:40:18 getmore database.collection cid:973023491046432059 ntoreturn:0 query: {} bytes:1049748 nreturned:201 130ms
Thu Apr 8 …Run Code Online (Sandbox Code Playgroud) 我们正在构建Java SDK以简化对提供REST API的服务的访问.此SDK将由第三方开发人员使用.我很难找到最适合在Java语言中实现错误处理的模式.
假设我们有其余的端点:GET /photos/{photoId}.这可能会返回以下HTTP状态代码:
该服务看起来像这样:
interface RestService {
public Photo getPhoto(String photoID);
}
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,我还没有解决错误处理问题.我显然希望为sdk的客户端提供一种方法来知道发生了哪个错误,以便从中恢复.Java中的错误处理是使用Exceptions完成的,所以让我们继续.但是,使用异常执行此操作的最佳方法是什么?
1.有一个关于错误信息的例外.
public Photo getPhoto(String photoID) throws RestServiceException;
public class RestServiceException extends Exception {
int statusCode;
...
}
Run Code Online (Sandbox Code Playgroud)
然后sdk的客户端可以执行以下操作:
try {
Photo photo = getPhoto("photo1");
}
catch(RestServiceException e) {
swtich(e.getStatusCode()) {
case 401 : handleUnauthenticated(); break;
case 403 : handleUnauthorized(); break;
case 404 : handleNotFound(); break;
}
}
Run Code Online (Sandbox Code Playgroud)
但是我真的不喜欢这个解决方案主要有两个原因:
2.有一个错误的类层次结构
方法签名仍然是:
public Photo getPhoto(String photoID) throws RestServiceException;
Run Code Online (Sandbox Code Playgroud)
但现在我们为每种错误类型创建例外:
public …Run Code Online (Sandbox Code Playgroud) 举个例子,我说我将JVM的最大堆设置为4GB.但是,一旦我的应用程序达到大约3GB,操作系统就开始将一些内存交换到磁盘.此时有几个对象已经超出范围,而JVM可能首先垃圾收集旧对象,而不是请求更多内存.在性能方面,进行垃圾收集运行比进行内存交换更好.JVM垃圾收集是否是关于这样的情况的智能,还是完全没有意识到它?我们可以以某种方式调整JVM来解决这种情况吗?
我知道垃圾收集有可能在我们达到3GB之前运行,因此我们实际上不需要交换内存,但这并没有真正回答我的问题.
编辑: 假设我的机器有超过4GB的内存,但有时还有其他应用程序占用一些内存,使我的内存少于4GB.我宁愿不必减少最大堆,因为大多数时候我会有4GB,但我想知道GC在其他情况下是否足够聪明.
我正在考虑我计划构建的Web应用程序的体系结构,并且我发现自己在思考应用程序的核心部分.因为我想创建一个Android应用程序来访问它,我已经在考虑拥有一个API.
鉴于我希望从第一天开始为我的应用程序提供外部API,使用该API作为接口层(Web)和应用程序业务层之间的接口是一个好主意吗?这意味着即使我的应用程序的主界面也会通过API访问数据.这种方法的缺点是什么?性能?
更一般地说,如果构建一个可能需要以不同方式访问的Web应用程序,那么将API(Web服务)作为接口层和业务层之间的接口是一种很好的架构设计吗?REST是一个很好的"工具"吗?
我刚刚使用Wicked框架构建了一个非常简单的Java Web应用程序.该项目的当前布局是:
src/
main/
java/
net/myapp/
Homepage.java
Homepage.html
reources/
scripts/
script.js
Run Code Online (Sandbox Code Playgroud)
在Homepage.html我试图加载JavaScript文件的文件中:
<script src="scripts/script.js"></script>
Run Code Online (Sandbox Code Playgroud)
我部署了应用程序,但浏览器找不到JavaScript文件.
该WAR文件正在使用Maven的战争插件包装.我查看了WAR文件,并看到以下布局:
WEB-INF/
classes/
net/myapp/
Homepage.class
Homepage.html
scripts/
script.js
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?我错过了什么?
我一直在创建表,方法是在页面中添加一个ListView(将其作为数据提供List<MyObject>),并为html文件中的每一列分配相应的ID.
但是现在我有一种情况,而不是简单的List<MyObject>我List<Map<String,MyObject>>.我还得到一个列表,其中包含嵌套map(List<String>)的所有可能键.现在我需要创建一个表,其中每个值Map应该在列中,并且键的名称指向该值.
假设我有以下数据:
keys = ['a', 'b']
data = [ { 'a' = 1, 'b' = 2 },
{ 'a' = 3, 'b' = 4 },
{ 'a' = 5, 'b' = 6}]
Run Code Online (Sandbox Code Playgroud)
我想创建表:
<table>
<tr>
<th>a</th>
<th>b</th>
</tr>
<tr>
<td>1</td>
<td>2</td>
</tr>
<tr>
<td>3</td>
<td>4</td>
</tr>
<tr>
<td>5</td>
<td>6</td>
</tr>
</table>
Run Code Online (Sandbox Code Playgroud)
知道嵌套Map中的键的名称和数量可以改变,在wicket中实现它的最佳方法是什么?
我正在寻找一个SQL库,它将解析SQL语句并返回SQL语句的某种Object表示形式.我的主要目标实际上是能够解析SQL语句并检索SQL语句中存在的表名列表(包括子查询,联接和联合).
我正在寻找一个商业友好的许可证库(例如Apache许可证).我正在寻找一个库而不是SQL语法.我不想构建自己的解析器.
到目前为止我能找到的最好的是JSQLParser,他们给出的例子实际上非常接近我正在寻找的东西.然而,它无法解析太多好的查询(DB2数据库),我希望找到一个更可靠的库.