小编Mar*_*rte的帖子

MongoDB在聚合查询上的表现

听了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)

performance mongodb

27
推荐指数
3
解决办法
2万
查看次数

Java SDK for REST API服务的错误处理

我们正在构建Java SDK以简化对提供REST API的服务的访问.此SDK将由第三方开发人员使用.我很难找到最适合在Java语言中实现错误处理的模式.

假设我们有其余的端点:GET /photos/{photoId}.这可能会返回以下HTTP状态代码:

  • 401:用户未经过身份验证
  • 403:用户无权访问此照片
  • 404:没有带有该ID的照片

该服务看起来像这样:

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)

但是我真的不喜欢这个解决方案主要有两个原因:

  • 通过查看方法的签名,开发人员不知道他可能需要处理哪种错误情况.
  • 开发人员需要直接处理HTTP状态代码,并知道它们在此方法的上下文中的含义(显然,如果它们被正确使用,很多时候已知含义,但情况可能并非总是如此).

2.有一个错误的类层次结构

方法签名仍然是:

public Photo getPhoto(String photoID) throws RestServiceException;
Run Code Online (Sandbox Code Playgroud)

但现在我们为每种错误类型创建例外:

public …
Run Code Online (Sandbox Code Playgroud)

java api error-handling sdk exception

21
推荐指数
3
解决办法
5457
查看次数

Java垃圾收集是否开始起作用以防止内存交换?

举个例子,我说我将JVM的最大堆设置为4GB.但是,一旦我的应用程序达到大约3GB,操作系统就开始将一些内存交换到磁盘.此时有几个对象已经超出范围,而JVM可能首先垃圾收集旧对象,而不是请求更多内存.在性能方面,进行垃圾收集运行比进行内存交换更好.JVM垃圾收集是否是关于这样的情况的智能,还是完全没有意识到它?我们可以以某种方式调整JVM来解决这种情况吗?

我知道垃圾收集有可能在我们达到3GB之前运行,因此我们实际上不需要交换内存,但这并没有真正回答我的问题.

编辑: 假设我的机器有超过4GB的内存,但有时还有其他应用程序占用一些内存,使我的内存少于4GB.我宁愿不必减少最大堆,因为大多数时候我会有4GB,但我想知道GC在其他情况下是否足够聪明.

java garbage-collection

11
推荐指数
1
解决办法
2371
查看次数

好的做法:REST API作为接口层和业务层之间的接口?

我正在考虑我计划构建的Web应用程序的体系结构,并且我发现自己在思考应用程序的核心部分.因为我想创建一个Android应用程序来访问它,我已经在考虑拥有一个API.

鉴于我希望从第一天开始为我的应用程序提供外部API,使用该API作为接口层(Web)和应用程序业务层之间的接口是一个好主意吗?这意味着即使我的应用程序的主界面也会通过API访问数据.这种方法的缺点是什么?性能?

更一般地说,如果构建一个可能需要以不同方式访问的Web应用程序,那么将API(Web服务)作为接口层和业务层之间的接口是一种很好的架构设计吗?REST是一个很好的"工具"吗?

architecture api rest

11
推荐指数
1
解决办法
1万
查看次数

访问Web应用程序的静态资源

我刚刚使用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)

我究竟做错了什么?我错过了什么?

java maven-2 wicket web-applications

4
推荐指数
1
解决办法
9656
查看次数

Wicket表与可变数量的列

我一直在创建表,方法是在页面中添加一个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中实现它的最佳方法是什么?

java wicket

3
推荐指数
2
解决办法
1万
查看次数

Java的SQL解析器库 - 检索SQL语句中存在的表名列表

我正在寻找一个SQL库,它将解析SQL语句并返回SQL语句的某种Object表示形式.我的主要目标实际上是能够解析SQL语句并检索SQL语句中存在的表名列表(包括子查询,联接和联合).

我正在寻找一个商业友好的许可证库(例如Apache许可证).我正在寻找一个库而不是SQL语法.我不想构建自己的解析器.

到目前为止我能找到的最好的是JSQLParser,他们给出的例子实际上非常接近我正在寻找的东西.然而,它无法解析太多好的查询(DB2数据库),我希望找到一个更可靠的库.

java sql parsing

2
推荐指数
2
解决办法
1万
查看次数