草庐IT

PostgreSQL 电子围栏的应用场景和性能

轻风博客 2023-03-28 原文

 

 

背景

电子围栏,这个在GIS应用中非常常见的词。在很多业务场景中都可以使用:

电子围栏的常见手段是圈出一块,或者一些多边形。当被监控对象在多边形内或者多边形外时(根据业务模型),作为一个判断条件,触发一些业务规则。

1、禁飞区

玩大疆无人机的话,你一定要知道哪里是禁飞区,否则可能违法被抓,但是你可能并不知道哪里是禁飞区,还有飞行高度的限制。

有了电子围栏,可以在飞行器内置这样的功能,你就可以放心的飞了。比如到达了禁飞区后,飞行器可以发出告警,禁止飞行。

 

 

2、共享单车还车点

共享单车乱摆放是个问题,原因是什么地方都能还车。使用电子围栏,可以约束用户的还车点,只允许用户将自行车停在某个空间内,或不在某个空间内才能还车。

 

 

3、汽车禁行区

例如,某些汽车,在某个时间段不允许出现在某个区域内。

例如限行车辆,例如危化品车辆、黄沙车、货车等的行驶范围。以往,我们只能靠摄像头、或者靠警力来管理。加入电子围栏,一切都变得更简单。

 

 

4、国界线

这个是有非常鲜明的地理属性的,电子围栏,结合流式计算,可以非常实时的发现异常。

 

 

5、山头线

我记得小时候,我们那里的班车线路都是承包的,谁要是敢乱拉客,车子可能是会被砸掉的。实际上这个也是一些商业边界的问题,如果商业边界涉及到地理信息,通过电子围栏,可以更加方便的实现边界控制和管理。

6、远程打卡,当你进入了办公区域附近(电子围栏)时,才允许打卡。

7、远程办公管理,公司可以划定一些可以办公的常用地的多边形,当员工出了这个区域时,触发事件。

8、公务用车、商用车辆的行驶区域管理,出了区域,可以触发事件。

9、放牧管理,例如在大草原放养的动物,可以挂上GPS跟踪器,划定电子围栏,出了区域,触发事件。

10、假释人员的管理,不在需要投入大量警力跟踪假释人员。当然人的管理更加复杂,因为跟踪器可能更换。

11、... ...

试想一下,当每个对象都带上空间属性后,还有很多很多很多场景,可以设置电子围栏。

空间数据的处理,将会是一片巨大的蓝海。

围栏除了空间属性,还可以有其他属性,PostgreSQL提供了btree_gist接口,可以对空间、标量字段建立联合索引,提高性能。

https://www.postgresql.org/docs/10/static/btree-gist.html

同时PostgreSQL还支持空间独立排他约束,可以防止围栏重叠。

https://www.postgresql.org/docs/10/static/ddl-constraints.html#ddl-constraints-exclusion

PostgreSQL 深耕空间数据管理数十年,一定能服务好这片业务,一起来为人类发展做出贡献。

电子围栏性能

电子围栏中,最常用的手段是点面判断,对于共享单车业务,我们为了防止自行车乱停放,可以圈定可以换车、或者不能换车的点(视业务需求),创建很多的多边形区域,当用户还车时,上报车辆位置,同时判断是不是落在可以换车的点,或者不能换车的点内。决定用户是否可以在当地还车。

可能有千万、甚至更多的多边形面。

这个需求和菜鸟的配送调度类似,也有点面判断的需求,下面是一个设计和性能测试

《菜鸟末端轨迹 - 电子围栏(解密支撑每天251亿个包裹的数据库) - 阿里云RDS PostgreSQL最佳实践》

1000万个多边形,根据位置查询这个位置在哪个面里面,或者有没有面包含了这个点。

PostgreSQL单机可以达到251亿次/天的点面判断请求的性能。

 

  作者丨digoal

有关PostgreSQL 电子围栏的应用场景和性能的更多相关文章

  1. ruby-on-rails - 如何让 datamapper 与 postgresql 数据库一起工作? - 2

    我已经找到了几个使用datamapper的示例,并且能够让它们正常工作。不过,所有这些示例都是针对sqlite数据库的。我正在尝试将数据映射器与postgresql一起使用。我将datamapper中的调用从sqlite3更改为postgres,并且我已经安装了dm-postgres-adapter。但它仍然不起作用。我还需要做什么? 最佳答案 与SQLite不同,PostgreSQL不将数据库存储在单个文件中。在你拥有createdyourdatabase之后,尝试这样的事情:DataMapper.setup:default,{:

  2. Ruby 的数字方法性能 - 2

    我正在使用Ruby解决一些ProjectEuler问题,特别是这里我要讨论的问题25(Fibonacci数列中包含1000位数字的第一项的索引是多少?)。起初,我使用的是Ruby2.2.3,我将问题编码为:number=3a=1b=2whileb.to_s.length但后来我发现2.4.2版本有一个名为digits的方法,这正是我需要的。我转换为代码:whileb.digits.length当我比较这两种方法时,digits慢得多。时间./025/problem025.rb0.13s用户0.02s系统80%cpu0.190总计./025/problem025.rb2.19s用户0.0

  3. ruby - Ruby 性能中的计时器 - 2

    我正在寻找一个用ruby​​演示计时器的在线示例,并发现了下面的代码。它按预期工作,但这个简单的程序使用30Mo内存(如Windows任务管理器中所示)和太多CPU有意义吗?非常感谢deftime_blockstart_time=Time.nowThread.new{yield}Time.now-start_timeenddefrepeat_every(seconds)whiletruedotime_spent=time_block{yield}#Tohandle-vesleepinteravalsleep(seconds-time_spent)iftime_spent

  4. ruby-on-rails - 验证电子邮件地址是 Paypal 用户 - 2

    我想验证一个电子邮件地址是否是PayPal用户。是否有API调用来执行此操作?是否有执行此操作的ruby​​库?谢谢 最佳答案 GetVerifiedStatus来自PayPal'sAdaptiveAccounts平台会为您做这件事。PayPal没有任何codesamples或SDKs用于Ruby中的自适应帐户,但我确实找到了编写codeforGetVerifiedStatusinRuby的人.您需要更改该代码以检查他们拥有的帐户类型的唯一更改是更改if@xml['accountStatus']!=nilaccount_status

  5. ruby-on-rails - 如果条件与 &&,是否有任何性能提升 - 2

    如果用户是所有者,我有一个条件来检查说删除和文章。delete_articleifuser.owner?另一种方式是user.owner?&&delete_article选择它有什么好处还是它只是一种写作风格 最佳答案 性能不太可能成为该声明的问题。第一个要好得多-它更容易阅读。您future的自己和其他将开始编写代码的人会为此感谢您。 关于ruby-on-rails-如果条件与&&,是否有任何性能提升,我们在StackOverflow上找到一个类似的问题:

  6. sql - 在 Rails Console for PostgreSQL 的表中显示数据 - 2

    我找到了这样的东西:Rails:Howtolistdatabasetables/objectsusingtheRailsconsole?这一行没问题:ActiveRecord::Base.connection.tables并返回所有表但是ActiveRecord::Base.connection.table_structure("users")产生错误:ActiveRecord::Base.connection.table_structure("projects")我认为table_structure不是Postgres方法。如何列出Postgres数据库的Rails控制台中表中的所有

  7. ruby-on-rails - Ruby on Rails - 需要在每周的特定时间将消息发送到电子邮件 - 2

    我想知道我应该如何着手这个项目。我需要每周向人们发送一次电子邮件。但是,这必须在每周的特定时间自动生成并发送。编码有多难?我需要知道是否有任何书籍可以提供帮助,或者你们中的任何人是否可以指导我。它必须使用ruby​​onrails进行编程。因此有一个网络服务和数据库集成。干杯 最佳答案 为什么这么复杂?您只需安排工作。您可以使用Delayed::Job例如。Delayed::Job让您可以使用run_at符号在特定时间安排作业,如下所示:Delayed::Job.enqueue(SendEmailJob.new(...),:run_

  8. ruby-on-rails - Rails 迁移中的 PostgreSQL 点类型 - 2

    我想使用PostgreSQL中的point类型。我已经完成了:railsgmodelTestpoint:point最终的迁移是:classCreateTests当我运行时:rakedb:migrate结果是:==CreateTests:migrating====================================================--create_table(:tests)rakeaborted!Anerrorhasoccurred,thisandalllatermigrationscanceled:undefinedmethod`point'for#/hom

  9. ruby-on-rails - Ruby on Rails 单表继承(STI)和单元测试问题(使用 PostgreSQL) - 2

    我正在使用带有单个“帐户”表的STI模型来保存用户和技术人员的信息(即用户...8)错误:test_the_truth(用户测试):ActiveRecord::StatementInvalid:PGError:ERROR:关系“技术人员”不存在:从“技术人员”中删除...从本质上讲,标准框架不承认Technicians和Users表(或PostgreSQL称它们为“关系”)不存在,事实上,应该别名为Accounts。有什么想法吗?我对RoR比较陌生,不知道如何解决这个问题而又不完全删除STI。 最佳答案 原来问题是由于存在:./te

  10. ruby - rails 3.2.2(或 3.2.1)+ Postgresql 9.1.3 + Ubuntu 11.10 连接错误 - 2

    我正在使用PostgreSQL9.1.3(x86_64-pc-linux-gnu上的PostgreSQL9.1.3,由gcc-4.6.real(Ubuntu/Linaro4.6.1-9ubuntu3)4.6.1,64位编译)和在ubuntu11.10上运行3.2.2或3.2.1。现在,我可以使用以下命令连接PostgreSQLsupostgres输入密码我可以看到postgres=#我将以下详细信息放在我的config/database.yml中并执行“railsdb”,它工作正常。开发:adapter:postgresqlencoding:utf8reconnect:falsedat

随机推荐