在 Amazon RDS 上安装 Kmeans PostgreSQL 扩展
Posted
技术标签:
【中文标题】在 Amazon RDS 上安装 Kmeans PostgreSQL 扩展【英文标题】:Installing the Kmeans PostgreSQL extension on Amazon RDS 【发布时间】:2015-08-26 06:42:35 【问题描述】:我参加了一些 Django 项目,我们使用地理数据(使用 GeoDjango)。 我已经按照 AWS 文档中的描述安装了 PostGis。
我们在地图上有很多点(标记)。我们需要对它们进行聚类。
我找到了一个库anycluster。这个库需要在 Postgre 数据库上安装名为 kmeans-postgresql 的 PostgreSQL 扩展。
但我的数据库位于 Amazon RDS。而且我无法通过 SSH 连接到它以安装扩展程序...
有人知道如何在我的 Amazon RDS 数据库上安装 kmeans-postgresql 扩展吗?
或者你能告诉我其他的聚类方法吗?
【问题讨论】:
【参考方案1】:K-Means 这是一个非常复杂的计算,对数据挖掘和聚类分析很有用(您可以在***页面https://en.wikipedia.org/wiki/K-means_clustering 中查看更多相关信息)。当必须处理许多点时,它具有很大的复杂性。 postgresql http://pgxn.org/dist/kmeans/doc/kmeans.html 的 K-means 扩展,它是用 C 语言编写并在数据库机器中编译的。与 plpgsql 中的过程相比,这带来了更好的性能。不幸的是,正如@estevao_lucas 回答的那样,此扩展未在 Amazon RDS 中启用。
如果你真的需要 k-means 结果,我翻译了它的这个实现,由 Joni Salonen 在http://jonisalonen.com/2012/k-means-clustering-in-mysql/ 创建并更改为 plpgsql https://gist.github.com/thiagomata/a9737c3455d6248bef9f。该函数使用临时表。如果您愿意,可以将其更改为仅使用 Pins 数组。
但是,如果您只需要在地图中显示一些图钉,您可能会对一个更快、更简单的函数感到满意,该函数将结果分组到 [x,y] 矩阵中。我创建了这样的函数,因为 kmeans 函数花费了太多时间来处理我的数据库(包含超过 400K 的元素)。所以这个实现确实更快,但没有你期望从 K-means 模块获得的所有功能。除此之外,这个网格函数https://gist.github.com/thiagomata/18ea14853998468c1a1d 会返回非常好的结果,当目标是在地图中显示大量引脚时。
【讨论】:
谢谢!你的功能非常有用!我决定不使用 k-means,因为我需要动态解决方案。而且我必须在服务器端聚集我的标记。我的标记经常被用户过滤。我的解决方案基于四叉树。每个标记都有其四码(纬度、经度是常数)。所以你可以通过 PostGis 和一个小的 SQL 请求对其进行查询和集群。【参考方案2】:您可以在 Amazon RDS 上安装支持的扩展程序,Kmeans 不是吗。
错误:Amazon RDS 不支持扩展“kmeans” 详细信息:安装扩展“kmeans”失败,因为它不在 Amazon RDS 支持的扩展列表中。 提示:Amazon RDS 允许具有 rds_superuser 角色的用户安装支持的扩展。请参阅:显示 rds.extensions; alexandria_development=> 显示 rds.extensions
RDS 扩展:
btree_gin, btree_gist, 检验通行证, 文案, 立方体, 数据库链接, dict_int, dict_xsyn, 地球距离, 模糊匹配, hstore, 整合, 数组内, 是, ltree, pgcrypto, 编程锁, pg_prewarm, pg_stat_statements, pg_trgm, 咖啡, 请, plperl, plpgsql, pltcl, plv8, 地理信息系统, postgis_tiger_geocoder, postgis_topology, postgres_fdw, ssl信息, 表函数, 测试解析器, tsearch2, 不重音, uuid-ossp
【讨论】:
以上是关于在 Amazon RDS 上安装 Kmeans PostgreSQL 扩展的主要内容,如果未能解决你的问题,请参考以下文章
如何将数据从 Postgres 移动到在 Amazon 的 RDS 上运行的 MySQL?