用好数据库索引提升嵌入式软件性能和效率

发表于:2010-10-25 10:22

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:麦科捷    来源:51Testing软件测试网采编

  如果我们希望加入一条新的街道,应用程序必须存储街道的坐标并计算其边界盒。

  1. Street street;  
  2. mco_rect_t wr;  
  3. wr.l.x = DOUBLE_MAX;  
  4. wr.l.y = DOUBLE_MAX;  
  5. wr.r.x = DOUBLE_MIN;  
  6. wr.r.y = DOUBLE_MIN;  
  7. Street_new(trans, &street);  
  8. Street_points_alloc(&street, n_points);  
  9. for (i = 0; i < n_points; i++)   
  10. {  
  11. if (points[i].latitude < wr.l.latitude) {  
  12. wr.l.latitude = points[i].latitude;  
  13. }  
  14. if (points[i].longitude < wr.l.longitude) {  
  15. wr.l.longitude = points[i].longitude;  
  16. }  
  17. if (points[i].latitude > wr.r.latitude) {  
  18. wr.r.latitude = points[i].latitude;  
  19. }  
  20. if (points[i].longitude > wr.r.longitude) {  
  21. wr.r.longitude = points[i].longitude;  
  22. }  
  23. Street_points_put(&street, i, &points[i]);  
  24. }  
  25. Street_wrap_rect_put(&street, &wr); 

  如果用户搜索一个位置,地图应用程序将结果(街道)在窗口中表示为一个坐标为||的地图长方形。

  1. mco_rect_t r;  
  2. mco_cursor_t c;  
  3. MCO_RET rc;  
  4. r.l.x = min_longitude;  
  5. r.l.y = min_latitude;  
  6. r.r.x = max_longitude;  
  7. r.r.y = max_latitude;  
  8. if (Street_streets_idx_search(trans, MCO_EQ, &c, (double*)&r) == MCO_S_OK)  
  9. {  
  10. for (; rc == MCO_S_OK; rc = mco_cursor_next(trans, &c))  
  11. {  
  12. Street street;  
  13. Street_from_cursor(trans, &c, &street);  
  14. // display it  
  15. }  
  16. }

  Patricia trie

  B树可以利用指定的前缀来定位关键字,例如,寻找以名字以“AAA”开头的公司。然而,一些应用程序必须搜索代表着一个特定值最长前缀的关键字。B树可以实现这种需求,但必须从最长的前缀开始进行多次迭代并且查询不同的给定值前缀。

  一种更加有效的前缀查找索引是用于查询字母-数字编码的实践算法,即通常所说的Patricia trie。Patricia trie是二叉树的一种变形,通常用于电话路由以及IP过滤。在第一种情况中,给定接入电话以及一张带有已知前缀的接线员表,应用程序必须选择正确的接线员接到该电话。在第二种情况下,给定了有效/拒绝域的IP掩码,收到的(一个)HTTP请求应被分类为接受、拒绝、转发,等等。下面的数据库模式定义了一张路由表,带有一个由位向量表示的掩码。

  1. class Route  
  2. {  
  3. Vector<bool> dest;  
  4. uint4 gateway;  
  5. uint4 interf;  
  6. uint2 metric;  
  7. unique patricia by_dest;  
  8. };

32/3<123>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号