【发布时间】:2010-03-26 18:28:42
【问题描述】:
我正在建立一个目录,用于在 GAE 上查找运动锦标赛 web2py 和一个 Flex 前端。用户选择位置、半径和最大值 日期从一组选择。我实现了这个查询的基本版本,但它是 低效且缓慢。我知道我可以改进它的一种方法是浓缩 我用来将对象组装成的许多单独的查询 批量查询。我刚刚了解到这是可能的。但我也在考虑利用内存缓存进行更广泛的重新设计。
主要问题是我无法按位置查询数据存储 因为 GAE 不允许多个数值比较语句 (=,>) 在一个查询中。我已经在用一个约会了,我需要 两个检查纬度和经度,所以这是不行的。目前, 我的算法是这样的:
1.) 按日期查询并选择
2.) 使用 geopy 距离模块中的目标函数来查找 提供距离的最大和最小纬度和经度
3.) 遍历结果并删除所有在 max/min 之外的 lat/lng
4.) 再次循环并使用距离函数检查准确 距离,因为第 2 步将包括半径之外的一些区域。 删除提供距离之外的结果(这是 2/3/4 组合 效率低下?)
5.) 组装多对多列表并附加到对象(这是我 需要切换到批量操作)
6.) 返回客户端
这是我使用 memcache 的计划。如果我在左边,请告诉我 对此字段,因为我之前没有使用内存缓存或服务器的经验 一般缓存。
-在缓存中保留一个列表,其中包含代表所有的“地理对象” 我的数据。它们有五个属性:纬度,经度,event_id, event_type(预计会扩展到锦标赛之外),以及 开始日期。此列表将按日期排序。
-还在缓存中保留一个表示开始的指针字典 并为我的应用程序使用的所有日期范围在缓存中结束索引(下一个 周、2 周、月、3 个月、6 个月、年、2 年)。
-有一个计划任务,每天凌晨 12 点更新指针。
-向缓存和数据存储添加新的插入;更新 指针。
使用这种设计,算法现在看起来像:
1.) 使用指针根据 提供日期。
2-4.) 与上述算法相同,除了地理对象
5.) 使用批量操作使用剩余地理位置选择完整锦标赛 对象的 event_ids
6.) 组装多对多
7.) 返回客户端
对这种方法的想法?非常感谢您的阅读和任何建议 可以给。
-丹麦人
【问题讨论】:
标签: python google-app-engine caching google-cloud-datastore web2py