小编Ken*_*thJ的帖子

使用正则表达式匹配字符串中的一个匹配项

前几天我坐着一个正则表达式问题.最终我用不同的方式解决了它,没有正则表达式,但我仍然想知道你是怎么做的:)

我遇到的问题是通过自动脚本运行svn update,我想检测冲突.使用或不使用正则表达式执行此操作是微不足道的,但它让我想到了一个更加模糊的问题:如何在空白的固定长度字段内完全匹配一个字符?

例如,假设我们想在六字节宽字段内匹配"C":

"C     " MATCH
"   C  " MATCH
" C C  " NO MATCH
"  M   " NO MATCH
"      " NO MATCH
"C      " NO MATCH (7 characters, not 6)
"   C " NO MATCH (5 characters, not 6)

regex

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

在Amazon Kinesis中读写事务

我是Kinesis的新手,所以这看起来像是一个非常基本的问题,但我无法找到Kinesis流中读写事务之间实际差异的明确答案.

来自Amazon Kinesis Limits的相关部件:

  • GetShardIterator每个打开的分片每秒最多可提供5个事务.
  • GetRecords可以检索10 MB的数据.
  • 每个分片每秒最多可支持5个​​事务进行读取,最高总数据读取速率为每秒2 MB.
  • 每个分片每秒最多可支持1024条记录进行写入,最高总数据写入速率为每秒1 MB(包括分区键).此写入限制适用于PutRecord和PutRecords等操作.

它清楚地提到每个分片每秒有5次读取和1024次写入.为什么读取比写入更昂贵,或者这里有一个关键的Kinesis概念我还没有掌握?

amazon-web-services amazon-kinesis

7
推荐指数
2
解决办法
3321
查看次数

使用谓词下推动态加载Hive中的分区

我在Hive中有一个非常大的表,我们需要从中加载一个分区子集.它看起来像这样:

CREATE EXTERNAL TABLE table1 (
    col1 STRING
) PARTITIONED BY (p_key STRING);
Run Code Online (Sandbox Code Playgroud)

我可以像这样加载特定的分区:

SELECT * FROM table1 WHERE p_key = 'x';
Run Code Online (Sandbox Code Playgroud)

p_key是关键上table1进行分区.如果我直接在WHERE子句中对其进行硬编码,那就很好了.但是,我有另一个查询,它计算我需要的分区.它比这更复杂,但让我们把它简单地定义为:

SELECT DISTINCT p_key FROM table2;
Run Code Online (Sandbox Code Playgroud)

所以现在我应该能够像这样构造一个脏查询:

SELECT * FROM table1
WHERE p_key IN (SELECT DISTINCT p_key FROM table2);
Run Code Online (Sandbox Code Playgroud)

或者写成内部联接:

SELECT t1.* FROM table1 t1
JOIN (SELECT DISTINCT p_key FROM table2) t2 ON t1.p_key = t2.p_key
Run Code Online (Sandbox Code Playgroud)

但是,当我运行它时,需要足够的时间让我相信它正在进行全表扫描.在上面的查询的解释中,我还可以看到DISTINCT操作的结果在reducer中使用,而不是mapper,这意味着mapper不可能知道应该加载哪些分区.当然,我并不完全熟悉Hive解释输出,所以我可能会忽略一些东西.

我找到了这个页面:Hive wiki上的MapJoin和Partition Pruning以及相应的故障表明它是在0.11.0版本中发布的.所以我应该拥有它.

是否有可能做到这一点?如果是这样,怎么样?

hadoop hive

7
推荐指数
1
解决办法
339
查看次数

客户端和服务器上的GWT/Java中的JSON或YAML编码

我正在寻找一个用Java编写的超级简单的JSON或YAML库(不是特别困扰哪一个),可以在客户端的GWT和服务器上的原始Java形式中使用.

我想要做的是:我有我的模型,它们在客户端和服务器之间共享,这些是数据交换的主要来源.我想在其间设计Web服务尽可能简单,并决定采用RESTful方法.

我的问题是,我知道我们的应用程序将来会大幅增长,并且手工编写所有的getter,setter,serialization,factory等等,这让我充满了恐惧.因此,为了避免它,我决定实现注释以跟踪模型上的属性.

我不能直接使用GWT自己的一个或者通过反射来序列化一切的原因是因为我们需要在序列化过程中进行一定数量的逻辑.也就是说,在原始模型的序列化过程中是否对其他模型的引用进行了序列化,或者是否刚刚传递了ID,以及类似的一般简单事物.然后我编写了一个注释处理器来预处理我的共享模型,并生成一个包含所有getter,setter,serialization,lazy-load等的实现类.

总而言之,我需要一些简单的YAML或JSON库,它允许我手动编码和解码,所以我可以通过我的注释处理器生成这个代码.我看了一下interwebs,但我遇到的每一个都支持一些反射,虽然一切都很精致,但是对于GWT来说它几乎没用.在GWT自己的JSON库的情况下,它使用JSNI来实现速度目的,使其成为无用的服务器端.

我想到的一个解决方案涉及在模型上编写两组序列化方法,一个用于客户端,一个用于服务器,但我宁愿不这样做.

另外,我对GWT很新,虽然我已经做了很多Java,但它在1.2天内又回来了,所以它有点生疏了.因此,如果您认为我完全以错误的方式解决这个问题,我愿意接受建议.

java gwt json yaml

5
推荐指数
1
解决办法
920
查看次数

Hazelcast分区计数和线程并发

在"17.4.1.分区感知操作"下的Master Hazelcast电子书中,它指出:

要执行分区感知操作,将创建一个操作线程数组.

单个操作线程执行多个分区的操作;

每个分区只属于1个操作线程.

假设我在一个17节点集群上有默认的271个分区,每个集群有16个分区线程.在集群中分配分区,这意味着所有分区都有一个与之关联的线程,每个线程只有1个分区(对我来说似乎是最佳情况).

忽略备份和近缓存,当我创建一个IMap实例时,这是否意味着我只能在整个集群的每个映射分区上执行1个并发的put/get操作?更进一步,如果我附加一个MapStore,这是否意味着我只能对我的后端数据库运行271个并发操作,因为没有办法制作异步MapStore?

我之所以提出这个问题,是因为我有一个高度并发的Web应用程序,而且我最近将数据存储区切换为与Hazelcast IMap一起运行.应用程序接受数千个并发连接,几乎每个请求至少执行分布式映射的get操作.我看到很多这些错误:

com.hazelcast.core.OperationTimeoutException: No response for 20000 ms. Aborting invocation! Invocation{serviceName='hz:impl:mapService', op=com.hazelcast.map.impl.operation.GetOperation{identityHash=1003806362, serviceName='hz:impl:mapService', partitionId=244, replicaIndex=0, callId=55212219, invocationTime=1462913274676 (Tue May 10 20:47:54 UTC 2016), waitTimeout=-1, callTimeout=10000, name=..., name=...}, partitionId=244, replicaIndex=0, tryCount=250, tryPauseMillis=500, invokeCount=1, callTimeout=10000, target=Address[10.0.2.221]:5701, backupsExpected=0, backupsCompleted=0, connection=Connection [/10.0.2.219:5701 -> /10.0.2.221:14565], endpoint=Address[10.0.2.221]:5701, alive=true, type=MEMBER} No response has been received! backups-expected:0 backups-completed: 0

这可能只是由于MapStore在尝试从数据库中获取时阻塞了分区线程吗?我还应该注意到,虽然它说No response for 20000 ms,20年代还没有过去.

我在Java 8上运行Hazelcast 3.6.2.

java hazelcast

5
推荐指数
1
解决办法
713
查看次数

接受通用集中的子类型

我正试图找到一种方法,我可以返回一个通用集,它将接受子类型.下面的代码返回一个Set<? extends A>我正在尝试添加的代码B.

import java.util.Set;
import java.util.HashSet;

public class Test {
    private static class A {}
    private static class B extends A {}

    public Set<? extends A> getSet() {
        return new HashSet<B>();
    }

    public void work() {
        getSet().add(new B()); // compile error
    }
}
Run Code Online (Sandbox Code Playgroud)

这导致以下错误:

Test.java:13: cannot find symbol
symbol  : method add(Test.B)
location: interface java.util.Set<capture#320 of ? extends Test.A>
                getSet().add(new B());
Run Code Online (Sandbox Code Playgroud)

通用通配符教程规定,B不能被添加到一个Set<? extends A>,因为我们不知道,如果B是的一个亚型A,但我刚才定义它是这样.有人可以为我澄清一下吗?

java generics

0
推荐指数
1
解决办法
207
查看次数