小编Dom*_*mra的帖子

Postgres并发性和可序列化.我需要SERIALIZABLE隔离级别吗?

我有一个项目和工作表:

项目

  • id = PK
  • job_id =乔布斯FK
  • status = IN_PROGRESS | 完成

工作

  • id = PK

项目以IN_PROGRESS开头,但是对它们执行工作,并交给工作人员进行更新.我有一个更新程序进程,当它们进入时会更新项目,并具有新状态.到目前为止我一直在做的方法是(伪代码):

def work(item: Item) = {
  insideTransaction {
    updateItemWithNewStatus(item)
    jobs, items = getParentJobAndAllItems(item)
    newJobStatus = computeParentJobStatus(jobs, items)
    // do some stuff depending on newJobStatus
  }
}
Run Code Online (Sandbox Code Playgroud)

那有意义吗?我希望这在并发环境中工作.我现在面临的问题是,当我只想在COMPLETE上执行一次逻辑时,COMPLETE会多次到达作业.

如果我将事务级别更改为SERIALIZABLE,我会收到"错误:由于事务之间的读/写依赖性而无法序列化访问"错误,如上所述.

所以我的问题是:

  • 我需要SERIALIZABLE吗?
  • 我可以逃脱SELECT FOR UPDATE,在哪里?
  • 有人可以向我解释发生了什么,为什么?

编辑:我重新打开了这个问题,因为我对以前的答案解释不满意.有人能为我解释一下吗?具体来说,我想要一些针对该伪代码的示例查询.

sql postgresql transactions

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

Scala - 组合函数n次

我有一个看起来像这样的函数:

def emulate: (Cpu => Cpu) => (Cpu => Cpu) = render => {
  handleOpcode   andThen
  handleTimers   andThen
  handleInput    andThen
  debug          andThen
  render
}
Run Code Online (Sandbox Code Playgroud)

我想多次调用handleOpcode函数(比如说10次).在Haskell中,我可能会写一个这样的函数:

ntimes n f = foldr (.) id (replicate n f)
Run Code Online (Sandbox Code Playgroud)

但在Scala中,我不确定如何写它.我试过了:

def nTimes(n: Int, f: => Any) = {
  val l = List.fill(n)(f)
  l.foldRight(identity[Function]){ (x, y) => y.andThen(x) }
}
Run Code Online (Sandbox Code Playgroud)

但类型都错了.

有没有一种简单的方法来实现这一目标?理想情况下,无需创建自己的功能.也许是斯卡拉兹的东西?

scala scalaz

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

确定单元二维列表的邻居

我有一个列表列表,类似于

[[1, 2, 3,],[4, 5, 6,],[7, 8, 9]].

以图形方式表示为:

1 2 3
4 5 6
7 8 9
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种优雅的方法来检查单元格的邻居值,水平,垂直和对角线.例如,[0] [2]的邻居是[0] [1],[1] [1]和[1] [2]或者数字2,5,6.

现在我意识到我可以做一个暴力攻击检查每个值a la:

[i-1][j]
[i][j-1]
[i-1][j-1]
[i+1][j]
[i][j+1]
[i+1][j+1]
[i+1][j-1]
[i-1][j+1]
Run Code Online (Sandbox Code Playgroud)

但这很简单,我想通过看一些更优雅的方法我可以学到更多东西.

python matrix

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

在Haskell中调用函数 - 初学者问题

刚开始学习Haskell.

我有一个空的源文件,里面有这个:

pe :: (Integral a) => a -> a
pe y = sum [x | x <- [1..y-1], x `mod` 3 == 0 || x `mod` 5 == 0]
Run Code Online (Sandbox Code Playgroud)

现在,如果我这样做,我可以像这样打电话给pe:

*Main> pe 1000
233168
Run Code Online (Sandbox Code Playgroud)

如何在源文件中调用它?如果我有

pe 1000
Run Code Online (Sandbox Code Playgroud)

它返回一个神秘的错误:

GHC stage restriction: `pe'
   is used in a top-level splice or annotation,
   and must be imported, not defined locally
 In the expression: pe 1000
Run Code Online (Sandbox Code Playgroud)

我需要在主要内容声明它吗?

haskell

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

Python .sort()没有按预期工作

在一个安静的星期六晚上解决一些谜题问题(哇哇......不)并且正在与sort()挣扎.结果并不完全符合我的预期.该程序遍历100 - 999的每个组合,并检查产品是否是一个palindome.如果是,请附加到列表中.我需要排序的列表:D这是我的程序:

list = [] #list of numbers

for x in xrange(100,1000): #loops for first value of combination
  for y in xrange(x,1000): #and 2nd value
    mult = x*y
    reversed = str(mult)[::-1] #reverses the number
    if (reversed == str(mult)):
      list.append(reversed)

list.sort()
print list[:10]
Run Code Online (Sandbox Code Playgroud)

哪个网:

['101101', '10201', '102201', '102201', '105501', '105501', '106601', '108801',
'108801', '110011']
Run Code Online (Sandbox Code Playgroud)

显然索引0大于1.任何想法是怎么回事?我有一种感觉它与尾随/前导零有关,但我看了一眼,我看不出问题.

如果您知道谜题的来源,可以获得奖励积分:P

python sorting list

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

在Haskell中生成2D网格

学习haskell并想要一个函数来生成类似于你在C中的方式的2D网格:

int data[3][3]
Run Code Online (Sandbox Code Playgroud)

什么是可接受和优雅的方法?压缩?与foldl?

我可以声明一个像:

x = [[0,0,0],
     [0,0,0],
     [0,0,0]]
Run Code Online (Sandbox Code Playgroud)

但我想要一个带xy参数的函数.苦苦挣扎,理解没有for/while循环的最简单方法:(

haskell

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

Java - 从字节数组中修剪尾随空格

我有类似这样的字节数组:

[77, 83, 65, 80, 79, 67, 32, 32, 32, 32, 32, 32, 32]
Run Code Online (Sandbox Code Playgroud)

大致等于

[M , S, A, P, O, C,  ,  ,  ,  ,  ,  ,  ] when printed as chars.
Run Code Online (Sandbox Code Playgroud)

现在我想修剪尾随空格,看起来像:

[77, 83, 65, 80, 79, 67]
Run Code Online (Sandbox Code Playgroud)

最简单的方法吗?

编辑:我不想处理字符串,因为有可能出现不可打印的字节,我不能丢失这些数据.它需要是字节数组:(每当我转换为字符串时,像01(SOH)02(STX)等字节丢失.

编辑2:只是为了澄清.如果我将字节数组转换为字符串,我会丢失数据吗?现在有点困惑.如果字节是不同的字符集怎么办?

java

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

在Javascript中非破坏性地反转数组

说我有一个功能:

function linesReverser(lines) {
  var localLines = lines.slice(); 
  localLines[1].reverse(); 
  return _.flatten(localLines);
}
Run Code Online (Sandbox Code Playgroud)

像这样使用它:

var input = [["Hello"],["Hello", "World"]["Attention", "Please"]];
var output1 = linesReverser(input); //["Hello", "World", "Hello", "Attention", "Please"]
var output2 = linesReverser(input); //["Hello", "Hello", "World", "Attention", "Please"]
Run Code Online (Sandbox Code Playgroud)

注意如何共享对象引用.我是JS的新手,但我认为复制这些值会缓解这个问题(line.slice()),但它似乎不起作用.这是因为嵌套数组?

我怎样才能非破坏性/不可逆地执行逆转?

javascript

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

在 FluentD 中解析内部 JSON

我有一些 JSON 通过 FluentD 驱动程序从 docker 容器发出,例如:

'{"timeMillis":1485917543709,"thread":"main","level":"INFO","loggerName":"com.imageintelligence.ava.api.Boot","message":"{\"dom\":\"DOM\"}","loggerFqcn":"org.apache.logging.slf4j.Log4jLogger","threadId":1,"threadPriority":5}'
Run Code Online (Sandbox Code Playgroud)

请注意该message字段是字符串编码的 JSON?当这些数据被 fluentD 捕获时,它最终看起来像这样,正如预期的那样:

2017-02-01 06:29:15 +0000 docker.6faad650faa6: {"log":"{\"timeMillis\":1485917543709,\"thread\":\"main\",\"level\":\"INFO\",\"loggerName\":\"com.imageintelligence.ava.api.Boot\",\"message\":\"{\\\"dom\\\":\\\"DOM\\\"}\",\"loggerFqcn\":\"org.apache.logging.slf4j.Log4jLogger\",\"threadId\":1,\"threadPriority\":5}\r","com.amazonaws.ecs.cluster":"dombou","container_id":"6faad650faa6012af4f32df79901b42488543a5e6e53517fe3579b01ab2b6862","container_name":"/upbeat_booth","source":"stdout"}`
Run Code Online (Sandbox Code Playgroud)

我使用这样的过滤器来解析 JSON:

<filter docker.**>
  @type parser
  format json
  key_name log
  reserve_data true
  hash_value_field log
</filter>
Run Code Online (Sandbox Code Playgroud)

我最终得到了半消毒的 JSON:

2017-02-01 06:32:10 +0000 docker.68c794f7f694: {"source":"stdout","log":{"timeMillis":1485917543709,"thread":"main","level":"INFO","loggerName":"com.imageintelligence.ava.api.Boot","message":"{\"dom\":\"DOM\"}","loggerFqcn":"org.apache.logging.slf4j.Log4jLogger","threadId":1,"threadPriority":5},"com.amazonaws.ecs.cluster":"dombou","container_id":"68c794f7f6948d4261b9497947834651abbf766e9aa51a76f39d6895b7a9ac18","container_name":"/sad_hamilton"}
Run Code Online (Sandbox Code Playgroud)

问题是,该message字段仍然是字符串转义的 JSON 字段。关于如何解析内部 JSON 字段的任何建议?如何堆叠过滤器?

logging fluentd

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

Gstreamer-如何用多个src构建应用程序?

在这种情况下,我有多个摄像头(rtspsrc)和一个singleton元素,它们对传入的视频流进行分析。我称它为单例元素,因为它具有请求源和接收器垫。应用程序中应该只存在其中之一,因为它可以在GPU上运行,并且可以通过批量处理获得更好的性能。将我正在构建的应用程序视为API,以添加相机,移除相机,打开和关闭每个相机的分析等。相机将对其进行分析,捕获结果并继续发送。麻烦的是,我需要共享一个Gstreamer元素(分析元素)。

因此,我有多个摄像头,将其馈入单个元素,然后馈入至appsink。这相当有效,但我希望能够:

  • 暂停特定的相机
  • 将每一个rtspsrc都完全隔离,这样一个错误就不会影响整个管道
  • 监听特定摄像机上的事件

如果我将所有摄像机都放在管道中,则无法弄清楚如何暂停特定摄像机。我无法暂停整个管道,因为这将停止所有摄像机。我想出的最好办法是删除并与特定摄像机的元素不同,然后在恢复时重新添加并重新链接。这有点。如果某个特定对象rtspsrc停止响应,则整个管道都将停止。如果rtspsrc不存在特定内容,则整个管道不会过渡到PLAYING状态

我应该如何设计我的应用程序?您认为我应该只有一条大型管道吗?还是应该有一个包含单例分析元素的管道,以及每个摄像机的管道,然后使用appsink和appsrc将它们连接起来?这种方法可能会使处理事情变得更容易,因为每个管道都是完全独立的?

让我知道您是否需要更多信息。

architecture video gstreamer

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