我正在 Google AppEngine 上运行一个多租户 java 高复制 Web 应用程序。应用程序成功使用了多属性索引(在 datastore-indexes.xml 文件中配置)。好吧,至少到目前为止……
从今天开始,至少有一个命名空间在执行查询时抛出 DatastoreNeedIndexExceptions。奇怪的是,相同的查询在其他命名空间中也有效。
这是datastore-indexes.xml中的索引配置和管理面板中的索引状态:
<?xml version="1.0" encoding="utf-8"?>
<datastore-indexes autoGenerate="false">
<datastore-index kind="Index_Asc_Asc_Asc_Asc" ancestor="false" source="manual">
<property name="components" direction="asc"/>
<property name="component_0" direction="asc"/>
<property name="component_1" direction="asc"/>
<property name="component_2" direction="asc"/>
<property name="component_3" direction="asc"/>
</datastore-index>
</datastore-indexes>
相应的查询如下所示:
SELECT __key__ FROM Index_Asc_Asc_Asc_Asc WHERE components = '12340987hja' AND component_0 = 'asdfeawsefad' AND component_1 = '4FnlnSYiJuo25mNU' AND component_3 = 'cvxyvsdfsa' AND component_2 >= 0
当我在我的应用程序或管理面板数据存储视图中执行此查询时,App Engine 会抛出 DatastoreNeedIndexException 并提供以下建议。同样,相同的查询也适用于其他命名空间:
The suggested index for this query is:
<datastore-index kind="Index_Asc_Asc_Asc_Asc" ancestor="false">
<property name="component_0" direction="asc" />
<property name="component_1" direction="asc" />
<property name="component_3" direction="asc" />
<property name="components" direction="asc" />
<property name="component_2" direction="asc" />
</datastore-index>
调查:
- 我试图设置 autoGenerate="true",但我确实得到了同样的错误,并且没有添加新的索引。
- 我试图在新创建的命名空间中执行查询:没问题。
- 开发服务器中不会出现该错误。
有什么我想念的吗?有没有其他人遇到过同样的问题?为什么相同的查询在其他命名空间中有效,但在该命名空间中无效?
非常感谢!