java - AppEngine Java 重新索引任务/映射器/作业

标签 java google-app-engine indexing mapreduce objectify

有人知道可用于重新索引所有/某些命名空间中的所有/某些实体的库或良好的代码示例吗?

如果我自己实现这个,我应该考虑 MapReduce 吗?

“我需要重新索引吗?”感觉就像许多开发人员都遇到过的问题,但我能找到的最接近的是 this ,这可能是一个好的开始?

其他选项是使用任务队列的自制解决方案,该任务队列迭代数据存储 namespace 和实体,但我不希望重新发明轮子并寻求一个强大的、经过验证的解决方案。

有哪些选项?

最佳答案

恐怕我不知道有任何预建系统。我认为您基本上需要创建一个游标来迭代所有实体,然后对所有实体执行 get 和 put (或者可以选择在执行 put 之前检查它们是否在索引中 - 如果您有一些实体会这样做)不需要更新,这会以读取和/或小操作为代价节省写入次数)。

请按照此处的示例操作: https://code.google.com/p/objectify-appengine/wiki/IntroductionToObjectify#Cursors

  1. 创建 java.util.concurrent.SynchronousQueue 来保存批量数据存储区 key 。
  2. 使用 ThreadManager 创建 10 个新的消费者线程(当前限制): https://developers.google.com/appengine/docs/java/javadoc/com/google/appengine/api/ThreadManager 这些线程应该执行以下操作:
    1. 创建一个新的 objectify 实例并关闭 objectify 的 session 缓存和内存缓存。
    2. 从 SynchronousQueue 中获取一批 key 。
    3. 使用批量获取来获取所有这些实体。
    4. 可以选择使用相关属性对所有这些实体执行仅键查询。
    5. 放入所有这些实体(或排除上面返回的实体)
    6. 重复第 2 步。
  3. 在循环中,使用仅键游标查询获取接下来的 30 个键,并将它们放入 SynchronousQueue 中。
  4. 将所有项目放入 SynchronousQueue 后,设置一个属性以在所有使用者线程完成工作后停止它们。

关于java - AppEngine Java 重新索引任务/映射器/作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15258246/

相关文章:

Java 反射 : how to get field value from an object, 不知道它的类

elasticsearch - 如何在 Elasticsearch 中建立索引和 bool 查询,以在某些字段上执行前缀匹配并在其他字段上执行精确短语匹配?

python - 仅使用名字查询全名数据存储属性的最佳过滤器是什么?

java - 使用 eclipse 访问 Java 的 GAE 开发环境中的本地 MySQL 实例

python - 在 Google App Engine 上用 Python 计算城市之间的距离并基于 GeoPT 查找周边城市

python - 在 Pandas 数据框中检索 .loc 索引值

python - 获取长向量中最小值索引的有效方法,python

java - 沉浸式模式 Android Studio

java - 使用我的 Selenium 代码在我的网站的表格中搜索文本

java - 底部 Jpanel 中的按钮