您能否牺牲性能来获得NFS上Sqlite的并发性?

您能否牺牲性能来获得NFS上Sqlite的并发性?,sqlite,Sqlite,我需要编写一个存储在网络文件系统上的客户端/服务器应用程序。我很清楚这是一个否定,但我想知道我是否可以牺牲性能(Hermes:“这次我指的是真正的斜杠”)来防止数据损坏 我的想法大致如下: 每次调用write时,在系统中创建一个单独的文件(如果需要,我愿意为每个连接执行此操作) 将文件名存储为当前毫秒时间戳 检查该时间或更早的文件是否存在 如果存在相同的,请等待0到10毫秒之间的随机时间,然后重试 当文件是最早的时间戳时,执行操作,删除文件锁,否则等待10毫秒,然后重试 如果文件持续时间超过一分

我需要编写一个存储在网络文件系统上的客户端/服务器应用程序。我很清楚这是一个否定,但我想知道我是否可以牺牲性能(Hermes:“这次我指的是真正的斜杠”)来防止数据损坏

我的想法大致如下:

  • 每次调用write时,在系统中创建一个单独的文件(如果需要,我愿意为每个连接执行此操作)
  • 将文件名存储为当前毫秒时间戳
  • 检查该时间或更早的文件是否存在
  • 如果存在相同的,请等待0到10毫秒之间的随机时间,然后重试
  • 当文件是最早的时间戳时,执行操作,删除文件锁,否则等待10毫秒,然后重试
  • 如果文件持续时间超过一分钟,则记录为错误,停止,直到确定数据未被人损坏
  • 我看到的问题是,如果某个东西锁定,则试图保持以前的状态。或者选择忽略它,如果状态更改实际上是成功的

    有没有更好的方法,不包括不这样做?或者有没有人在写这些东西时遇到的问题比Sqlite FAQ警告的要少得多?这些缓解措施是否会成为防止数据损坏的因素

    几点注意:

    • 这必须存在于国家科学基金会上,为什么不重要,因为这不是我的决定(看起来我在这一点上不够清楚)
    • 系统上的读写器数量将在5到10之间,所有读写器同时进行,但很少在同一记录上进行
    • 只有客户端和共享内存空间,没有办法在上面安装服务器,或者使用基于服务器的RDM,如果有,显然我会在纽约一分钟内完成
    • 数据量最初约为70MB(纯文本,未压缩),然后以合理但不惊人的速度连续增长
    • 我会接受这样一个回答:“不,您不能通过牺牲性能来获得NFS上合理保证的并发性”,如果它包含对原因的详细而合理的解释的话

    • 是的,有更好的方法。不要使用NFS来执行此操作

      如果您愿意在每次发生更改时创建一个新文件,我希望您有少量数据和/或很少发生更改。如果数据很小,为什么要使用SQLite呢?为什么不让文件有节点名和时间戳呢


      我认为,如果你能多描述一下你试图解决的真正问题,会有所帮助。例如,如果你有多个读者和一个作者,还有其他方法。

      是的,有更好的方法。不要使用NFS来执行此操作

      如果您愿意在每次发生更改时创建一个新文件,我希望您有少量数据和/或很少发生更改。如果数据很小,为什么要使用SQLite呢?为什么不让文件有节点名和时间戳呢


      我认为,如果你能多描述一下你试图解决的真正问题,会有所帮助。例如,如果您有多个读者和一个作者,那么还有其他方法。

      您所说的“并发”是什么意思?你的意思是“多个读卡器/多个写卡器”,还是“多个读卡器/一个写卡器,延迟有限”?你说的“并发”是什么意思?你的意思是“多个读者/多个作者”,还是“多个读者/一个作者,延迟有限”?

      谢谢你的回答,NFS是不可协商的,数据不是微不足道的小数据,我将编辑问题以添加更多内容。谢谢你的回答,NFS是不可协商的,数据不是微不足道的小,我将编辑问题以添加更多内容。