Java 使用存储在memcache中的db哈希表,结合cron作业写入google app engine数据存储

Java 使用存储在memcache中的db哈希表,结合cron作业写入google app engine数据存储,java,python,google-app-engine,memcached,Java,Python,Google App Engine,Memcached,我在google app engine中有一个大型管道,用于存储数据存储的中间工作。这很快就填满了我每天的写作配额 相反,我考虑在memcache中存储一个hash table db对象,管道使用该对象存储所有中间结果,并使用cron作业循环遍历hash table db的所有条目并将它们写入数据存储。然后,我将使用db对象读取数据,只有当数据不存在时,我才会进入数据存储 有这样的图书馆吗?我主要对Java感兴趣,但python也可以。有没有想过会出问题?我知道memcache可能会删除一些东西

我在google app engine中有一个大型管道,用于存储数据存储的中间工作。这很快就填满了我每天的写作配额

相反,我考虑在memcache中存储一个hash table db对象,管道使用该对象存储所有中间结果,并使用cron作业循环遍历hash table db的所有条目并将它们写入数据存储。然后,我将使用db对象读取数据,只有当数据不存在时,我才会进入数据存储


有这样的图书馆吗?我主要对Java感兴趣,但python也可以。有没有想过会出问题?我知道memcache可能会删除一些东西,但预期的性能增益应该是什么

阅读您的案例,我认为可能适合您的需要。它具有备份memcache中的数据存储实体的功能,以减少对数据存储的读取次数

请记住,缓存仅适用于put/get/delete操作,因此不会缓存查询。此外,任何put/delete操作都会自动更新缓存的实体


编辑:在询问者进行了一些澄清之后,似乎询问者需要的是一个用于写缓冲区的memcache,而不是一个读缓冲区,因此,我的建议不再适用于他/她的用例。

关于可能出现问题的主要想法是memcache无法保证且不可预测-您无法控制数据保持缓存。您可能可以在内存中完成这项工作,但为了从缓存中的数据丢失中恢复,您肯定需要一些回退。需要检查的一件明显的事情是:您是否已对搜索中不使用的所有属性声明了
index=False
?默认情况下索引的属性会导致每次写入两个索引。我知道memcache是不可预测的,但我愿意冒险。我正在寻找类似于中描述为“不等待数据存储的长期持久性”的解决方案。啊,那么您想缓冲您的put操作,并且只在缓冲区填满时写入它们?这不会使用相同数量的写入配额吗?这将如何减少您的写入计数?不,因为在此期间,所有更新都将在bugger(memcache)中发生,并且每个实体只需一次写入就可以收费。我的工作流程包括从facebook graph api下载内容,计算和更新实体的值,然后写下最终数据。我明白了,我现在明白了,但在仔细阅读GAE文件柜和邮件列表后,我很困惑什么库可以提供您所需的功能。Guava的LoadingCache有一个内存缓存,可以用来计算和重新计算来自外部源的数据并缓存结果,但我不确定这对您的项目是否有用。