小编Dan*_*ber的帖子

Java阻止列表实现

我在SO和Google上搜索了这个问题的答案,但到目前为止找不到合适的解决方案.

我目前正在处理图形路由问题中的LayerManager.经理负责提供和重置固定的图层集.

我想用阻塞列表实现Consumer-Producer模式,以便在没有可用的自由层的情况下阻止传入路由请求.到目前为止,我只发现了阻塞队列,但由于我们不需要FIFO,LIFO但随机访问队列并不真正起作用.为了更精确一点,这样的事情应该是可能的:

/* this should be blocking until a layer becomes available */
public Layer getLayer(){ 

    for ( Layer layer : layers ) {
        if ( layer.isUnused() && layer.matches(request) )
            return layers.pop(layer);
    }
}
Run Code Online (Sandbox Code Playgroud)

有没有办法实现这个目标?

java list blocking

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

快速全局分布式用户配额管理的架构

我们已经构建了一个免费的全球分布式移动分析REST API.这意味着我们的服务器遍布全球,运行相同应用程序的不同版本(美国,欧洲等).这些服务是负载均衡器的背后,所以如果他/她今天或明天都有请求,我不能保证同一个用户总是得到相同的应用程序/服务器.API是公开的,但用户必须提供API密钥才能让我们将其与付费请求配额相匹配.

由于我们对每个请求进行大量数字运算,因此我们希望尽可能减少请求时间,特别是对于身份验证/授权和配额监控.由于我们目前仅使用一个用户数据库(必须位于单个数据中心),因此有时美国用户向美国的应用程序/服务器发出请求,该应用程序/服务器在欧洲对用户进行身份验证.所以我们正在寻找一个用户数据库交互的解决方案:

  1. 发生在同一个应用服务器上
  2. get在所有应用程序服务器之间同步
  3. 应该很容易集成到java应用程序中
  4. 应该很快(每个请求都会发生变化)

我们到目前为止所做的事情:

  • 每个服务器上的单个数据库>未同步,噩梦
  • 所有服务器的单个数据库> ok,当与slave一起使用作为后备但是美国用户必须在Atlantic上进行身份验证
  • 开始安装bdr但在路上失败了(没时间,太复杂,难以转换)
  • 看着redis.io

由于这是我的第一个全球分布式REST API,我想知道其他公司是如何做到的.(yelp,谷歌等)

任何反馈都非常感谢,

干杯,

丹尼尔

sql architecture postgresql web-services web

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

Java 8 Stream API收集器问题

我正在遍历图形的边缘,并希望得到所有源和目标的列表.这是我到目前为止:

public Set<Vertex> getVertices(){

    Set<Vertex> vertices = this.edges.stream().map(edge -> edge.getSource()).collect(Collectors.toSet());
    vertices.addAll(this.edges.stream().map(edge -> edge.getTarget()).collect(Collectors.toSet()));
    return vertices;
}
Run Code Online (Sandbox Code Playgroud)

有没有办法在同一个映射/收集步骤中获取源和目标?像(PSEUDO-CODE)这样的东西:

edges.stream().collect(edge.getSource()).collect(edge.getTarget())
Run Code Online (Sandbox Code Playgroud)

或普通的旧Java 7

for ( Edge e : edges ){
    vertices.add(e.getSource());
    vertices.add(e.getTarget());
}
Run Code Online (Sandbox Code Playgroud)

干杯,丹尼尔

java java-8 java-stream collectors

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

liquibase 导入后 Hibernate 序列未更新

我有一个空的 Spring Boot 应用程序,我想在其中加载以前版本的数据。该数据已经包含主键。因此我使用 Liquibase loadData 方法:

<column name="id" type="bigint" autoIncrement="${autoIncrement}">
    <constraints primaryKey="true" nullable="false"/>
</column>
<loadData tableName="point_of_interest" separator=";" file="classpath:config/liquibase/data/public.poi.csv">
</loadData>

// the java annotations
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
Run Code Online (Sandbox Code Playgroud)

这按预期工作,但 Hibernate 序列未更新。如果我想保存新对象,这会导致重复的主键。

我究竟做错了什么?

干杯,丹尼尔

hibernate jpa liquibase spring-boot

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