
本文档介绍了在 Google App Engine (GAE) 中处理动态 Kind 的索引配置问题。由于 GAE 仅允许通过 `index.yaml` 文件和 `appcfg.py` 工具进行索引配置,因此针对 Kind 名称动态生成的情况,提出了一种通过外部服务器动态生成 `index.yaml` 并部署的解决方案。
在 Google App Engine (GAE) 中,数据存储的索引配置通常通过 index.yaml 文件进行静态定义。 然而,当应用程序需要处理动态生成的 Kind 名称时,传统的 index.yaml 配置方法便不再适用。 本文将介绍一种解决方案,通过动态生成 index.yaml 文件并使用 appcfg.py 工具进行部署,以应对动态 Kind 的索引需求。
理解问题
GAE 的数据存储依赖于索引来高效地执行查询。 index.yaml 文件定义了应用程序所需的索引。 当 Kind 名称是动态生成时,预先定义所有可能的索引变得不可行。
解决方案概述
由于 GAE 本身不支持在运行时动态创建索引,我们需要借助外部服务器来完成这项任务。 该服务器负责接收来自 GAE 应用程序的请求,根据请求动态生成 index.yaml 文件,并使用 GAE SDK 提供的 appcfg.py 工具部署新的索引配置。
具体步骤
搭建外部服务器:
创建 API 接口:
动态生成 index.yaml 文件:
以下是一个 PHP 示例代码,演示如何动态生成 index.yaml 文件:
<?php
$kindName = $_POST['kindName'];
$properties = $_POST['properties']; // 假设是一个数组,包含属性名和排序方向
$yamlContent = "indexes:\n";
$yamlContent .= "- kind: " . $kindName . "\n";
$yamlContent .= "  properties:\n";
foreach ($properties as $property) {
    $yamlContent .= "  - name: " . $property['name'] . "\n";
    $yamlContent .= "    direction: " . $property['direction'] . "\n";
}
file_put_contents('index.yaml', $yamlContent);
echo "index.yaml 文件已生成";
?>使用 appcfg.py 部署索引:
以下是一个 PHP 示例代码,演示如何使用 appcfg.py 部署索引:
<?php
$appId = "your-app-id";
$version = "your-app-version";
$command = "/path/to/appcfg.py update_indexes . --application=" . $appId . " --version=" . $version;
exec($command, $output, $return_var);
if ($return_var == 0) {
    echo "索引部署成功";
} else {
    echo "索引部署失败: " . implode("\n", $output);
}
?>在 GAE 应用程序中调用 API 接口:
注意事项
总结
通过借助外部服务器,我们可以克服 GAE 在运行时动态创建索引的限制。 这种解决方案允许应用程序灵活地处理动态 Kind 名称,并根据需要创建所需的索引。 然而,需要注意安全性、错误处理、部署时间以及潜在的成本问题。 在实施此方案之前,请务必仔细评估其适用性,并根据实际需求进行调整。
以上就是动态 Kind 在 App Engine 中的索引配置的详细内容,更多请关注php中文网其它相关文章!
 
                        
                        每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
 
                Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号