5

Ich nehme an einem Django-Porojekt teil und wir verwenden Geodaten (mit GeoDjango). Ich habe PostGis wie in AWS-Dokumenten beschrieben installiert.Installation der Kmeans PostgreSQL-Erweiterung auf Amazon RDS

Wir haben viele Punkte (Marker) auf der Karte. Und wir müssen sie zusammenfassen.

Ich fand eine Bibliothek anycluster. Für diese Bibliothek muss die PostgreSQL-Erweiterung kmeans-postgresql in der Postgre-Datenbank installiert sein.

Aber meine Datenbank befindet sich auf Amazon RDS. Und ich kann nicht per SSH verbinden, um eine Erweiterung zu installieren ...

Jeder weiß, wie kann ich kmeans-postgresql Erweiterung auf meiner Amazon RDS-Datenbank installieren?

Oder vielleicht können Sie mir andere Möglichkeiten der Clusterbildung beraten?

Antwort

5

Der K-Means Es ist eine wirklich komplexe Berechnung ist, die Data Mining und Clusteranalyse nützlich ist (Sie mehr darüber in der Wikipedia-Seite https://en.wikipedia.org/wiki/K-means_clustering sehen). Es hat eine große Komplexität, wenn es um viele Punkte geht. Die K-bedeutet Erweiterung zu postgresql http://pgxn.org/dist/kmeans/doc/kmeans.html es ist in C geschrieben und in der Datenbank-Maschine kompiliert. Dies bringt eine bessere Leistung im Vergleich zu einer Prozedur in plpgsql. Leider hat @estevao_lucas diese Erweiterung nicht in Amazon RDS aktiviert.

Wenn Sie wirklich das k-Means-Ergebnis benötigen, habe ich diese Implementierung übersetzt, die von Joni Salonen in http://jonisalonen.com/2012/k-means-clustering-in-mysql/ erstellt und in plpgsql https://gist.github.com/thiagomata/a9737c3455d6248bef9f geändert wurde. Diese Funktion verwendet die temporäre Tabelle. Es ist möglich, es zu ändern, nur Arrays von Pins zu verwenden, wenn Sie möchten.

Wenn Sie jedoch nur einige Pins in einer Karte anzeigen müssen, werden Sie wahrscheinlich mit einer wirklich schnelleren und einfacheren Funktion zufrieden sein, die die Ergebnisse in einer [x, y] -Matrix gruppiert. Ich habe eine solche Funktion erstellt, weil die kmeans-Funktion zu viel Zeit in Anspruch nahm, um meine Datenbank zu verarbeiten (mit mehr als 400K Elementen). Diese Implementierung ist also sehr viel schneller, bietet jedoch nicht alle Funktionen, die Sie von dem K-Means-Modul erwarten würden. Außerdem gibt diese Gitterfunktion https://gist.github.com/thiagomata/18ea14853998468c1a1d sehr gute Ergebnisse zurück, wenn das Ziel darin besteht, eine große Anzahl von Pins in einer Karte anzuzeigen. Example of Grid Result

+0

Vielen Dank! Deine Funktionen sind sehr nützlich! Ich entschied, k-means nicht zu verwenden, weil ich dynamische Lösung brauche. Und ich muss meine Markierungen auf der Serverseite gruppieren. Meine Markierungen werden oft von Benutzern gefiltert. Meine Lösung basiert auf Quadtree. Jeder Marker hat seinen Quadcode (lat, lon sind konstant). Sie können es abfragen und über PostGis und eine kleine SQL-Anfrage zusammenfassen. – Anton

1

Sie können nur unterstützte Erweiterungen auf Amazon RDS installieren und Kmeans ist es nicht.

ERROR: Extension "kmeans" is not supported by Amazon RDS DETAIL: Installing the extension "kmeans" failed, because it is not on the list of extensions supported by Amazon RDS. HINT: Amazon RDS allows users with rds_superuser role to install supported extensions. See: SHOW rds.extensions; alexandria_development=> SHOW rds.extensions

RDS-Erweiterungen:

btree_gin, btree_gist, chkpass, citext, cube, dblink, dict_int, dict_xsyn, earthdistance, fuzzystrmatch, hstore, intagg, intarray, isn, ltree, pgcrypto, pgrowlocks, pg_prewarm, pg_stat_statements, pg_trgm, plcoffee, plls, plperl, plpgsql, pltcl, plv8, postgis, postgis_tiger_geocoder, postgis_topology, postgres_fdw, sslinfo, tablefunc, test_parser, tsearch2, unaccent, uuid-ossp