小编Jan*_*ter的帖子

从JVM发送POSIX信号

如何从JVM中发送POSIX信号?(在Java或Clojure中)

在我尝试使用谷歌搜索之前,我从未想过这会成为一个问题 - 有很多关于处理信号的信息,但没有关于发送它们的信息.

如果没有使用JNI或调用shell来执行"kill",还有其他方法可以向PID发送信号吗?

java jvm clojure jvm-languages

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

RethinkDB改变了性能:架构建议?

我正在使用RethinkDB构建一个应用程序,我即将切换到使用更改源.但我正面临建筑选择,我想得到一些建议.

我的应用程序当前从用户登录的几个表中加载所有用户数据(将所有用户数据发送到前端),然后处理来自前端的请求,更改数据库,准备并向用户发送更改的项目.我想把它换成改变饲料.我看待它的方式,我有两个选择:

  1. 为每个表设置单个更改源.登录到特定服务器的用户进行筛选,并手动将更改分发给用户.这些更改源从不关闭,例如它们具有我的服务器的生命周期.
  2. 当用户登录时,为该用户设置单独的更改源,仅为该用户的数据(使用getAll带有辅助索引的数据).保持与当前登录用户一样多的更改源.用户注销时关闭它们.

解决方案#1有一个很大的缺点:RethinkDB更改源没有时间(或版本号)的概念,例如Kafka.这意味着没有办法a)加载初始数据,b)获得自初始加载以来发生的变化.有一个时间窗口可能会丢失更改:在初始数据加载(a)和更改源设置的时刻(b)之间.我觉得这很令人担忧.

解决方案#2似乎更好,因为includeInitial可以用来获取初始数据,然后不间断地获得后续更改.我必须处理初始加载性能(加载所有数据的单个转储比处理数千次更新更快),但它似乎更"正确".但是缩放呢?我计划每个服务器处理多达1k个用户--RethinkDB准备处理数千个更改源,每个都是一个getAll查询?这些改变饲料的实际活动将非常低,这只是我担心的数字.

RethinkDB手册对更改进度缩放有点简洁,说:

变更进展在扩展时表现良好,尽管它们与每次写入时具有开放式馈送连接的服务器数量成比例地创建额外的集群内消息.

解决方案#2创建了更多的订阅源,但是两个解决方案的开放订阅源连接的服务器数量实际上是相同的.并且"改变饲料表现良好,因为它们规模"还不足以继续:-)

我也有兴趣知道处理服务器重启/升级和断开连接的推荐做法.我看到它的方式,如果RethinkDB发生任何事情,客户端必须includeInitial在重新连接后执行完整数据加载(使用),因为无法知道在停机期间丢失了哪些更改.那是人们做的吗?

performance rethinkdb

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

Amazon S3是否保证写入顺序?

Amazon S3提供"最终一致性"模型,您存储的数据最终对所有客户端可见.

我找不到关于是否保证书面订购的任何官方信息.如果您正在构建一个客户端可能希望在其他人存储数据后立即读取数据的架构,这一点至关重要.

如果保留写入顺序,我可以通过让写入器存储保护(例如,特殊键)和写入操作的结束来轻松检查数据是否完整.

如果没有保证写入顺序,那么我有一个严重的问题,因为我无法确定我能安全地读取数据.

我阅读了Werner Vogel关于一致性的文章(http://www.allthingsdistributed.com/2007/12/eventually_consistent.html),他指出没有单调写入一致性的系统很难编程,但没有说S3是否保证它或不.

cloud concurrency amazon-s3

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

RethinkDB:​​如何在嵌套结构中追加数组

我试图附加到嵌套字段中的数组,我必须根据运行时信息找到它.

这是一个例子:

r.db("test")
  .table("test")
  .insert({ "stock": [{ "bin":"abc", "entries":[{ "state":1 }] }] })
Run Code Online (Sandbox Code Playgroud)

这个想法是文档包含一个"stock"键,它是一个包含多个"存储箱"的数组.每个bin都有一个名称和一些条目.我需要能够原子地附加其中一个箱子中的条目,而不会影响其他箱子.

我试过这种方法:

r.db("test")
 .table("test")
 .update(function(item) {
    return {"stock": item("stock")
     .filter({ "bin": "abc" })
     .append({ "state":42 })
    }
 })
Run Code Online (Sandbox Code Playgroud)

...但是这并没有附加到正确的级别,我不确定它是否会保留名称不是"abc"的现有垃圾箱.

rethinkdb

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