• 在过去二十年中,移动互联网飞速发展,催生了大量LBS相关应用,这也让空间信息处理成为较为基础的诉求。PostgreSQL因为其起源就与空间信息处理关系很大,所以在该领域一直有着非常大的优势。MongoDB也在很早就对空间信息处理做了很强的支持,这也帮助MongoDB在发展过程中拿下来部分市场。MariaDB也在去年8月(参考)收购了厂商“CubeWerx”以增强其在地理信息的存储与分析上的能力。

    在过去的十年,MySQL也在不断的增强空间信息的处理能力,本文概述了,当前MySQL在这一块的能力现状。

    当前,数据库访问与处理GIS相关的信息主要参考的是:OGC Standards中的“Simple Feature Access – Part 2: SQL Option”(链接)。当前,MySQL支持的空间类型主要包括:

    • 点、折线、多边形、空间(可以存储前面三种类型中的任何一种)
    • 多点、多折线、多多边形、多空间(可以存储多个任何类型)

    使用MySQL空间类型,则最好使用InnoDB或NDB引擎(其他还支持空间类型的引擎有MyISAM、ARCHIVE),其中InnoDB支持较为完整,对空间索引也有比较好的支持。

    如果要支持地理信息,则可以使用“WGS 84系统”标准的坐标系统,正式名称是:世界大地测量系统(World Geodetic System, WGS),对应的SRID为4326。WGS是当前被广泛使用的地球空间坐标系统,例如GPS就是使用该坐标系统。该坐标系统,建立以地球的质心为中心的一套坐标系统,里面包括地球的一些基础数据等。

    在MySQL可以通过如下Query可以查看MySQL中的WGS 84系统的一些基本信息:

    SELECT *
           FROM INFORMATION_SCHEMA.ST_SPATIAL_REFERENCE_SYSTEMS
           WHERE SRS_ID = 4326\G
    *************************** 1. row ***************************
                    SRS_NAME: WGS 84
                      SRS_ID: 4326
                ORGANIZATION: EPSG
    ORGANIZATION_COORDSYS_ID: 4326
                  DEFINITION: GEOGCS["WGS 84",DATUM["World Geodetic System 1984",
                              SPHEROID["WGS 84",6378137,298.257223563,
                              AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],
                              PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],
                              UNIT["degree",0.017453292519943278,
                              AUTHORITY["EPSG","9122"]],
                              AXIS["Lat",NORTH],AXIS["Long",EAST],
                              AUTHORITY["EPSG","4326"]]
                 DESCRIPTION:

    基础对象和对应的WKT表达

    MySQL或者说SQL标准中支持的对象包括如下,:Point、Linestring、Polygon、Multi Point、Multi Linestring、Multi Polygon、Geometry Collection。

    具体的:

    • Point、LineSting都比较好理解
      • 在WKT表达中,点的X/Y坐标,之间并没有逗号;但是,MySQL的Point函数,则是需要逗号的。
      • 这里省略了一个叫“LineRing”的概念,LineRing就是一个不相交且头尾相连的LineString
    • Polygon有两种,一种是普通的,一种是带hole的Polygon
    • Polygon是一个Surface,不仅仅是组成边缘的点,还包含内部覆盖区域
    • Polygon即便是普通的(不带hole),外部也会有一个括号
    • Polygon通常是由多个LineRing组成

    在这个规范下,就可以非常简单的创建OGC标准中的对象,例如:

    CREATE TABLE geom (
        id int,
        p POINT SRID 0
    );
    
    INSERT INTO geom(id,p) values (1,Point(12,30));

    在实际查询中,默认的空间类型会返回二进制类型数据,所以客户端查询需要进行一次转换,将其转换容易阅读的文本类型,即标准的WKT(Well-Known Text):

    转化前:

    mysql> select * from geom;
    +------+---------------------------+
    | id   | p                         |
    +------+---------------------------+
    |    1 |              (@      >@ |
    +------+---------------------------+
    1 row in set (0.00 sec)

    使用了WKT函数转换后:

    mysql> select id,ST_AsText(p) from geom;
    +------+--------------+
    | id   | ST_AsText(p) |
    +------+--------------+
    |    1 | POINT(12 30) |
    +------+--------------+

    好的,这是一个简单的入门介绍,更多的能力需要自己探索,祝玩得开心。

  • 最近游戏领域最大的新闻大概就是王国之泪的发售了。我从“旷野之息”开始接触“塞尔达传说”系列,从刚开始的摸不着头脑,到逐渐开始觉得有意思,到后来逐渐还是非常喜欢这款游戏。所以,对今年5月份的“王国之泪”发售也充满了期待。

    从上周末到现在,我大概玩了10个小时左右,说说感受吧。新的游戏,从空岛探索开始,在经过短暂的引导之后,就从高高的空岛上一跃而下,持续的在空中自由飞翔,然后慢慢的出现游戏的名字–王国之泪,正式来开游戏序幕。

    以下为游戏中的截图:

    这一段是被精心设计的,在曾经的海拉鲁大地上空,全新的场景,全新的飞翔技能,让用户在最短的时间里面感受到这是在海拉鲁大地上的全新的故事。

    (more…)
  • 从MySQL 8.0.13起,开始支持函数索引功能,该功能可以很好的帮助开发人员或者DBA去优先生产环境的SQL语句。通常,我们是并建议在SQL语句的查询条件中对列进行任何的函数计算的,因为这种做很有可能导致原本可以使用索引的查询条件,变得无法使用索引。

    例如,我们看如下的查询条件:

    SELECT * FROM user_info WHERE substr(id_card_no,1,6) = '330106';

    虽然,该表的id_card_no上原本是存在索引的,但是上面的写法则会导致SQL无法正常使用id_card_no列上的索引。一般来说,我们会建议开发人员,避免这种写法,更多的是将表达式放到右侧,如上的SQL则建议修改为:

    SELECT * FROM user_info WHERE id_card_no like '330106%';

    但某些情况下,我们可能无法修改SQL,例如:

    • 有很多的函数计算或表达式操作并不能简单的转换到表达式的右边,例如:uid%1024 = 7
    • 应用程序来自第三方,而我们并不拥有第三方的代码,也无法进行修改SQL
    • 生产故障已经由此产生,可能来不及修改线上的代码或SQL
    • 还有一个略微“牵强”的说法:SQL语法更加注重解释性,并不关注实现,基于此大原则,上面的SQL写法并没有什么问题。

    函数索引使用示例

    MySQL的函数索引是8.0版本引入的重要特性之一。它允许开发人员在查询中使用函数,并且依旧可以有效地加速查询性能。具体的,函数索引的作用是通过在函数表达式上创建索引,在处理字符串、日期、数值等类型的数据时特别有用。

    (more…)
  • 重要更新

    在上周AWS RDS PostgreSQL新增了pgvector,本周阿里云PostgreSQL 14/15也发布支持了pgvector插件,同时,AnalyticDB(ADB) PostgreSQL也发布了结合大模型构建专业领域Chatbot的实践:参考。可以看到,大模型已经确定会改变生活的各方各面,而大模型和其生态的技术阵地也在被争夺。

    阿里云在5月10日宣布核心产品全线降价,最高50%:参考 ;接着,腾讯云也宣布多款核心产品降价,最高降幅40%;前天,移动云也通过其官方渠道宣布全线产品降价,最高60%:参考。就想问问,还有谁?

    阿里云PostgreSQL Serverless新增支持实例的自动启/停能力,可以进一步帮助用户在部分场景中节约场景,例如开发环境的数据库,通常在晚上压力很多或者没有压力,这时,可以对成本有较大的节约:链接

    更新详情

    阿里云
    • PostgreSQL Serverless实例新增支持设置实例自动启停和变更实例弹性策略:链接
    • RDS SQL Server 2014/2016/2017/2019升级了内核小版本:链接
    • PostgreSQL 14、15新增支持pgvector 0.4.1插件,ganos插件升级到5.5:链接
    • RDS SQL Server自治服务支持SQL洞察和审计:链接
    腾讯云RDS MySQL
    • 托管MySQL 发布新版数据库审计,支持全审计和规则审计等特性:链接
    AWS
    • Timestream 现在支持将数据转存到S3: 链接
    • Aurora实例新增 I/O 优化型实例: 链接
    GCP
    • 托管SQL Server 支持在同一主实例上进行时间点恢复 (PITR) 功能:链接
    • BigQuery Omni 新增区域AWS – 亚太地区(首尔)(aws-ap-northeast-2)支持。

    推荐阅读

    • 阿里云「极致优化」RDS 倚天ARM架构数据库大揭秘:链接
    • 周六 10:00,深入解析 TiKV 新架构!丨Infra Meetup No.162:链接
    • 向量数据库的下一站,2023的8个预测:链接
  • 近期,据可靠的非正式消息,MySQL可能很快会发布新的版本管理模式:通过长期稳定版(Long-term Support)和短期创新版本(Innovation Releases)的方式进行管理。如果采用这种模式,将会更加有利于新特性新功能的引入,同时保持LTS的长期处于较稳定的状态(可以参考ClickHouse的版本管理现状),缺点则是版本会非常多,对新手不是那么友好。另外,因为MySQL 5.7的生命周期将于今年10月正式结束,如果届时依旧没有新的版本的话,MySQL 8.0就会是唯一的稳定版,通常对于快速发展的开源软件来说,这并不健康。所以,前述的消息虽然是非正式的,但是相信是非常可靠的。那么新的版本是号会是8.1、9.0、或者23、2023,拭目以待。

    本文总结了过去20年,MySQL的版本发展历史,回顾一下其重大功能发布的情况,以及大版本发布的节奏。

    (more…)
  • 重要更新

    TiDB x CAPCOM丨为在线游戏提供灵活、可靠、可扩展的数据库服务:链接。该案例最早于去年7月对外发布(参考),CAPCOM是老牌日本游戏厂商,其经典黄色logo承载了一代代游戏人的记忆,而TiDB进入CAPCOM也代表中国数据库厂商征战全球数据库领域的取得成果,加油!

    TDSQL落地湖州银行新核心系统:该行基于TDSQL建设新核心系统,系统包含众多应用于业务,整体上,提升了客户体验,同时系统灾备恢复时间接近于零,业务处理能力提升10倍以上:链接

    原阿里云OLTP和 NoSQL数据库产品总负责人曹伟(花名:鸣嵩)创立的云猿生数据公司正逐步浮出水面:参考1。曹伟曾担任阿里云数据库负责人、也是PolarDB产品创始人,其创业产品也非常让人期待。

    更新详情

    腾讯云RDS MySQL
    • RDS MySQL 支持创建跨可用区 RO,进一步提升数据容灾能力:链接
    • TDSQL-C MySQL 发布数据库代理功能,支持自动读写分离、事务拆分、连接池、防闪断等功能:链接
    阿里云
    • PolarDB-X发布5.4.17版,提供了生成列、函数索引、默认秒级加字段、显示与隐藏索引等功能:参考
    AWS
    • MemoryDB for Redis 开始支持Redis 7: 链接;支持了 IAM 身份验证: 链接
    • Redshift 数据共享功能开始支持中国地区:链接
    • Aurora Serverless v2 新增四个地区支持,包括亚太(海得拉巴)、西班牙、苏黎世和阿联酋:链接
    GCP
    • Spanner审计日志新增了请求数据时间记录:链接
    • BigQuery优化了外部数据源(Cloud SQL或Spanner)下推能力:链接
    • AlloyDB新增了更多区域支持,包括德里、马德里、荷兰、米兰、特拉维夫、蒙特利、多伦多、巴西、圣地亚哥等:链接

    推荐阅读

    • 国有大行,全面开花 | TDSQL inside:链接
    • 浙江首例!国产分布式数据库落地湖州银行新核心系统 | TDSQL inside:链接
    • 平凯星辰中标建设银行国产数据库小机下移项目:链接
    • 帮你了解一下GaussDB:链接
    • 中国联通数据库实践:CUDB for OceanBase分布式数据库产品规模应用:链接
    • 数据库内核那些事|分布式数据库,挂掉两台机器会发生什么?链接
    • 使用AI优化慢SQL,开发秒变DBA:链接
    • 什么是矢量数据库:链接
    • AI大模型与向量数据库 PGVECTOR:链接
    • 16年等待,再见 SQL Boy,这一次数据库交互形态彻底被颠覆了!:链接
    • 国产数据库“开源套壳”是否可取?链接
    • 今天,Nintendo《塞尔达传说–王国之泪》正式发售。根据Nintendo官网招聘信息,其主要使用了MySQL、PostgreSQL、Redis等数据,根据AWS官网的Nintendo的客户案例来看,该公司还使用Aurora(MySQL兼容)