我正在考虑使用PipelineDB进行分析。对于数据仓库,我想将所有新数据附加到文件中,并tail -F
将其附加到psql
,就像网站上的示例一样。
我有多个数据源,因此要获得确定性结果,我想将它们全部附加到相同的输入文件中,它们将保持相同的顺序。
是否有一种简单,惯用的避免竞争条件的方法?我可以将数据传输到单文件服务器吗?
编辑:
实际上,竞争条件正是我想要的。但每一行必须是原子的,所以没有任何一行被破坏。但是,行可以是交错的。
答案 0 :(得分:1)
您可以使用GNU Parallel这样使用互斥锁预先填充/包装所有写入:
sem --id atomicwrite echo hi >> file
因此,要测试它,请在不同的终端中运行这些:
for i in {0..999}; do sem --id atomicwrite echo hi >> file ; done
答案 1 :(得分:0)
您可以使用mkdir来模拟互斥锁,这是一种原子创建和检查操作(这在内核级别得到了保证):
# locking example -- CORRECT
# Bourne
lockdir=/tmp/myscript.lock
if mkdir "$lockdir"
then # directory did not exist, but was created successfully
echo >&2 "successfully acquired lock: $lockdir"
# continue script
else
echo >&2 "cannot acquire lock, giving up on $lockdir"
exit 0
fi
有关更多信息(和其他解决方案),请查看常见问题解答: