当前位置: 首页 > 知识库问答 >
问题:

数据存储脏读和删除

海宁
2023-03-14

我之前在datastore中发布了一个问题:删除事务之外的实体,但在这方面运气不佳,也许我在描述问题时太复杂了,所以我会尝试用不同的问题来解决这个问题:

我没有对我的实体使用任何事务,并意识到我可能会因为脏读而丢失提交的更新,并且完全可以接受它(主要是统计数据)。我唯一需要确定的是,如果我在已经进行了脏读但尚未提交更新后将其删除,它不会将该实体写回。我不想通过使用事务来引入争用或性能问题,因为删除很少见,更新很多。

Servlet A
{
   entity = persistenceManager.getObjectById(Entity.class, key)
   //Stuff
   persistenceManager.deletePersistent(entity);
}


Servlet B
{
   entity = persistenceManager.getObjectById(Entity.class, key) // dirty read made before deletion

   //Updated some fields, after deletion was commited
   persistenceManager.flush(); ? the object would be written back
}

我通过在B中引入脏读和删除之间的20秒睡眠来测试上面的情况,它确实将对象写回(实际上这是第一个问题的答案,将更新该问题)。

我可以依靠 memcache 让 Servlet B 在让实体知道 A 即将删除实体之前让我们说通过查看从 A 放置的布尔缓存条目“删除实体-[KEY]”,如果它在那里,那么我不应该读取 servlet B 中的实体,我知道 memcache 不保证不驱逐数据,但如果它在那里,它可以立即从 servlet B 访问?

有什么更好的主意吗?

共有1个答案

章越
2023-03-14

在编写之前,使用servlet B中的事务来验证实体是否仍然存在。

你为什么要避免交易?这就是交易的目的,没有它们,您就不能保证任何数据同步。

 类似资料:
  • 我们在游戏中通常需要存储用户数据,如音乐开关、显示语言等,如果是单机游戏还需要存储玩家存档。 Cocos Creator 中我们使用 cc.sys.localStorage 接口来进行用户数据存储和读取的操作。 cc.sys.localStorage 接口是按照 Web Storage API 来实现的,在 Web 平台运行时会直接调用 Web Storage API,在原生平台上会调用 sqli

  • Web开发中一个很重要的议题就是如何做好用户的整个浏览过程的控制,因为HTTP协议是无状态的,所以用户的每一次请求都是无状态的,我们不知道在整个Web操作过程中哪些连接与该用户有关,我们应该如何来解决这个问题呢?Web里面经典的解决方案是cookie和session,cookie机制是一种客户端机制,把用户数据保存在客户端,而session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构

  • 如果我要[按顺序]读取一个文件,其中包含两个团队以及他们每行的分数,例如: 黑豹3骑士5 火箭4泰坦9 天线8 Yahoos 6 黑豹10泰坦3 雅虎4火箭7 我需要想办法跟踪每支球队及其输赢,并将它们打印到新文件中。例如: 团队胜负 黑豹 1 1 火箭0 2 我面临的问题是,我不知道如何存储球队的名称,以便我能够在PrintWriter读取数据时将输赢添加到该球队。任何输入都将不胜感激,并提供解

  • 到目前为止,我们介绍了如何处理数据以及如何构建、训练和测试深度学习模型。然而在实际中,我们有时需要把训练好的模型部署到很多不同的设备。在这种情况下,我们可以把内存中训练好的模型参数存储在硬盘上供后续读取使用。 读写NDArray 我们可以直接使用save函数和load函数分别存储和读取NDArray。下面的例子创建了NDArray变量x,并将其存在文件名同为x的文件里。 from mxnet im

  • 我觉得问这个问题很愚蠢,但我似乎无法为使用GAE的项目清除本地数据存储。我咨询了以下SE问题: 如何删除Google App Engine中的所有数据存储 我也看过这些文档,其中的命令似乎非常明确。我可以导航到,然后运行 然而,我不断收到一个错误,说明我的应用程序没有这样的文件或目录。 我确信我为我的应用程序输入了正确的名称,因为它与我的文件中的名称相匹配,与我的项目在本地的文件夹相匹配,并且与G

  • 主要内容:本节引言:,1.Android文件的操作模式,2.文件的相关操作方法,3.文件读写的实现,4.读取SD卡上的文件,5.关于原生模拟器SD卡的问题,6.读取raw和assets文件夹下的文件,代码下载:,本节小结:本节引言: 嘿嘿,看到这个题目,相信部分读者会问,你前面的Fragment写完了吗?嗯,没写完,因为想例子,需要 一点时间,为了提高效率,所以决定像多线程一样,并发的来写教程,这样可能可以加快写教程的进度, 到现在为止,刚好写了60篇,离完成入门教程还很远呢,而前面也说过,想在

  • 我正在将数据从BigQuery读入dataproc spark集群。如果在我的例子中BigQuery表中的数据最初是从GCS加载的,那么如果BigQuery connector for dataproc(newAPIHadoopRDD)首先将数据下载到Google云存储桶中,那么直接从GCS读取数据是否更好?这两种方法有什么利弊吗?

  • 我试图实现一个功能来删除当前用户的帐户上iOS。帐户删除工作正常,但问题是删除帐户时,我无法从数据库和存储中删除帐户的数据。 “currentUser.delete”删除该帐户,但我认为没有身份验证可以从数据库和存储中删除其数据。日志中将显示“权限被拒绝”消息。运行此功能后,我看到Firebase控制台验证页面中的帐户已消失,但来自数据库和存储的数据仍然存在。 这是删除帐户的正确方法吗? 在删除帐