微信小程序学习实录12:掌握大数据量轨迹展示的MySQL结构设计

获取经纬度信息后,mysql建立数据表po_trajectory,字段包含tra_id、longitude、latitude、tra_time和openid。

为微信小程序创建的 po_trajectory 数据表,字段包含 tra_idlongitudelatitudetra_timeopenid,从结构设计上看,对于大数据量的轨迹展示是比较合适的,但需要从多个方面综合考量,下面为你详细分析:

数据表设计合理性

优点
  • 主键 tra_id:它可作为数据表的主键,能唯一标识每条轨迹记录,在数据插入、更新、删除操作时能保证数据的完整性和一致性。同时,数据库查询时利用主键进行查询,速度会更快。
  • longitudelatitude:这两个字段用来存储经纬度信息,是轨迹数据的核心内容。借助它们可以在地图上标记出具体的位置点,进而绘制出轨迹。
  • tra_time:该字段记录了轨迹点的采集时间,在展示轨迹时,可依据时间顺序对轨迹点进行排序,从而实现轨迹的动态展示。另外,还能根据时间范围进行数据筛选,提升查询效率。
  • openid:此为微信用户的唯一标识,可通过它对不同用户的轨迹数据进行区分和管理,便于多用户场景下的轨迹数据存储和查询。
潜在问题
  • 数据类型选择:若 longitudelatitude 采用浮点数类型存储,在数据量很大时,可能会占用较多存储空间。可以考虑采用合适的精度进行存储,例如使用 DECIMAL 类型。
  • 索引优化:若要对大数据量进行高效查询和分析,需要合理创建索引。例如,可在 openidtra_time 上创建索引,这样能加快按用户和时间范围的查询速度。
  • 数据分区:当数据量非常大时,可考虑对数据表进行分区,例如按时间范围进行分区,以提升查询性能。

示例 SQL 代码

下面是创建 po_trajectory 数据表的 SQL 语句,同时包含索引的创建:

-- 创建数据表
CREATE TABLE po_trajectory (tra_id INT AUTO_INCREMENT PRIMARY KEY,longitude DECIMAL(9, 6) NOT NULL,latitude DECIMAL(9, 6) NOT NULL,tra_time DATETIME NOT NULL,openid VARCHAR(32) NOT NULL,INDEX idx_openid (openid),INDEX idx_tra_time (tra_time)
);

代码解释

  • DECIMAL(9, 6):用于存储经纬度信息,精度为小数点后 6 位,能满足大部分地图展示的需求。
  • idx_openididx_tra_time:分别为 openidtra_time 字段创建的索引,可加快按用户和时间范围的查询速度。
  • $_POST 中的 longitudelatitude 数据,且在向数据库插入数据时,若经纬度小数位数与数据库表字段定义的小数位数不一致,是否会出现问题取决于数据库字段的数据类型和定义。

数据格式

1. 数据库字段为 DECIMAL 类型

如果你在创建数据库表时,将 longitudelatitude 字段定义为 DECIMAL 类型,例如 DECIMAL(9, 6),其含义是总共 9 位数字,其中小数部分占 6 位。

小数位数多于 6 位

当传入的经纬度小数位数多于 6 位时,数据库会进行四舍五入操作。比如,你传入的经度是 116.3971288,数据库会将其存储为 116.397129

小数位数少于 6 位

若传入的经纬度小数位数少于 6 位,数据库会在小数部分末尾补零。例如,你传入的纬度是 39.9165,数据库会将其存储为 39.916500

2. 数据库字段为 FLOATDOUBLE 类型

若数据库字段定义为 FLOATDOUBLE 类型,这两种类型是浮点类型,存储的是近似值。

小数位数问题

浮点类型通常不会严格限制小数位数,不过可能会存在精度丢失的问题。在处理高精度的经纬度数据时,不建议使用 FLOATDOUBLE 类型,因为它们可能无法精确存储数据。

总结

总体而言,po_trajectory 数据表的设计对于大数据量的微信小程序轨迹展示是合适的,但需要根据实际的数据量和查询需求进行优化,如合理选择数据类型、创建索引和进行数据分区等。


@漏刻有时

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/77537.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机系统---性能指标(3)续航与散热

计算机电池续航的性能指标 一、电池基础物理指标 电池容量(核心指标) 单位: 毫安时(mAh):常见于手机/平板,反映电池存储电荷量,需结合电压计算实际能量(如3.7V电池&…

贪心算法之最小生成树问题

1. 贪心算法的基本思想 贪心算法在每一步都选择局部最优的边,希望最终得到整体最优的生成树。常见的两种 MST 算法为 Kruskal 算法 和 Prim 算法。这两者均满足贪心选择性质和最优子结构性质,即: 贪心选择性质:局部最优选择&…

LeetCode hot 100—编辑距离

题目 给你两个单词 word1 和 word2, 请返回将 word1 转换成 word2 所使用的最少操作数 。 你可以对一个单词进行如下三种操作: 插入一个字符删除一个字符替换一个字符 示例 示例 1: 输入:word1 "horse", word2 &q…

2.3 Spark运行架构与流程

Spark运行架构与流程包括几个核心概念:Driver负责提交应用并初始化作业,Executor在工作节点上执行任务,作业是一系列计算任务,任务是作业的基本执行单元,阶段是一组并行任务。Spark支持多种运行模式,包括单…

NO.82十六届蓝桥杯备战|动态规划-从记忆化搜索到动态规划|下楼梯|数字三角形(C++)

记忆化搜索 在搜索的过程中,如果搜索树中有很多重复的结点,此时可以通过⼀个"备忘录",记录第⼀次搜索到的结果。当下⼀次搜索到这个结点时,直接在"备忘录"⾥⾯找结果。其中,搜索树中的⼀个⼀个结点…

使用 VBA 宏创建一个选择全部word图片快捷指令,进行图片格式编辑

使用 VBA 宏批量选择图片 ✅ 第一步:创建 .dotm 加载项文件 1、使用环境 office word 365,文件格式为.docx 图片格式为.PNG 2、创建 .dotm 加载项文件 打开 Word,新建一个空白文档。 按下 Alt F11 打开 VBA 编辑器。 点击菜单栏&#xff…

深度学习的下一个突破:从图像识别到情境理解

引言 过去十年,深度学习在图像识别领域取得了惊人的突破。从2012年ImageNet大赛上的AlexNet,到后来的ResNet、EfficientNet,再到近年来Transformer架构的崛起,AI已经能在许多任务上超越人类,比如人脸识别、目标检测、医…

使用dyn4j做碰撞检测

文章目录 前言一、环境准备添加依赖基本概念 二、实现步骤1.创建世界2.添加物体3.设置碰撞监听器4.更新世界 三、完整代码示例四、优化补充总结 前言 dyn4j 提供了高效的碰撞检测和物理模拟功能,适用于游戏开发、动画制作以及其他需要物理交互的场景。通过简单的 A…

VS Code settings.json 文件中常用的预定义变量‌及其用途说明

VS Code settings.json 常用预定义变量 以下是 Visual Studio Code 配置文件中常用的预定义变量列表: 1. 工作区相关变量 变量描述示例值${workspaceFolder}当前工作区根目录的绝对路径C:/projects/my-project${workspaceFolderBasename}工作区文件夹名称&#x…

elasticSearch-搜索引擎

搜索引擎的优势 有了数据库分页查询,为什么还需要搜索引擎? 搜索引擎速度上很快数据库分页查询,随着数据库数据量增大,页数靠后,会导致搜索速度变慢,但是搜索引擎不会搜索引擎支持分词查询,地…

安装OpenJDK1.8 17 (macos M芯片)

安装OpenJDK 1.8 下载完后,解压,打开 环境变量的配置文件即可 vim ~/.zshrc #export JAVA_HOME/Users/xxxxx/jdk-21.jdk/Contents/Home #export JAVA_HOME/Users/xxxxx/jdk-17.jdk/Contents/Home #export JAVA_HOME/Users/xxxxx/jdk-11.jdk/Contents…

断言与反射——以golang为例

断言 x.(T) 检查x的动态类型是否是T,其中x必须是接口值。 简单使用 func main() {var x interface{}x 100value1, ok : x.(int)if ok {fmt.Println(value1)}value2, ok : x.(string)if ok {//未打印fmt.Println(value2)} }需要注意如果不接受第二个参数就是OK,这…

Java设计模式:系统性解析与核心模式

一、设计模式三大分类总览 创建型模式(5种) 核心目标:对象创建的优化与解耦 单例模式(Singleton) 工厂模式(Factory) 抽象工厂模式(Abstract Factory) 建造者模式&#…

Elasticsearch 向量数据库,原生支持 Google Cloud Vertex AI 平台

作者:来自 Elastic Valerio Arvizzigno Elasticsearch 将作为第一个第三方原生语义对齐引擎,支持 Google Cloud 的 Vertex AI 平台和 Google 的 Gemini 模型。这使得联合用户能够基于企业数据构建完全可定制的生成式 AI 体验,并借助 Elastics…

408 计算机网络 知识点记忆(7)

前言 本文基于王道考研课程与湖科大计算机网络课程教学内容,系统梳理核心知识记忆点和框架,既为个人复习沉淀思考,亦希望能与同行者互助共进。(PS:后续将持续迭代优化细节) 往期内容 408 计算机网络 知识…

10-MySQL-性能优化思路

1、优化思路 当我们发现了一个慢SQL的问题的时候,需要做性能优化,一般我们是为了提高SQL查询更快,一个查询的流程由下图的各环节组成,每个环节都会消耗时间,要减少消耗时候需要从各个环节都分析一遍。 2 连接配置优化 第一个环节是客户端连接到服务端,这块可能会出现服务…

Docker:安装与部署 Nacos 的技术指南

1、简述 Nacos(Dynamic Naming and Configuration Service)是阿里巴巴开源的一个动态服务发现、配置管理和服务治理的综合解决方案,适用于微服务架构。 Nacos 主要功能: 服务发现与注册:支持 Dubbo、Spring Cloud 等主流微服务框架的服务发现与注册。动态配置管理:支持…

【非机动车检测】用YOLOv8实现非机动车及驾驶人佩戴安全帽检测

非机动车及驾驶人佩戴安全帽检测任务的意义主要包括以下几点: 保障行车安全:非机动车包括自行车、电动车等,佩戴安全帽能够有效保护骑车人头部,减少因交通事故造成的头部伤害风险,提高行车安全系数。 符合交通法规&am…

壹起航:15年深耕互联网营销,助力中国工厂出海获客

在全球化浪潮下,越来越多的中国工厂渴望拓展海外市场,但面临品牌建立、稳定询盘获取及营销成本降低等多重挑战。壹起航凭借15年的丰富经验,整合外贸建站、SEO优化及海外短视频营销,为中国工厂提供一站式出海解决方案。 一、外贸独…

Emacs 折腾日记(二十)——修改emacs的一些默认行为

上一篇我们完成了emacs输入法的配置以及将emacs配置成了使用vim的操作方式。但是emacs目前有些默认行为我不太喜欢,这节我们一起来修改它 备份设置 我们打开emacs的配置文件所在路径,发现有大量的~结尾的文件,这是emacs的备份文件。这里&am…