5

Biorę udział w niektórych poroject Django i używamy danych geo (z GeoDjango). Zainstalowałem PostGis zgodnie z opisem w dokumentach AWS.Instalowanie rozszerzenia Kmeans PostgreSQL na Amazon RDS

Mamy wiele punktów (znaczników) na mapie. I musimy je zgrupować.

Znalazłem jedną bibliotekę anycluster. Ta biblioteka wymaga zainstalowania rozszerzenia PostgreSQL o nazwie kmeans-postgresql w bazie danych Postgre.

Ale moja baza danych znajduje się na Amazon RDS. I nie mogę połączyć się z nim przez SSH, aby zainstalować rozszerzenie ...

Ktoś wie, w jaki sposób mogę zainstalować rozszerzenie kmeans-postgresql w mojej bazie danych Amazon RDS?

A może możesz doradzić mi inne sposoby łączenia w klastry?

Odpowiedz

5

K-oznacza to, że jest naprawdę skomplikowane obliczenie, które są przydatne do eksploracji danych i analizy skupień (można zobaczyć więcej na ten temat na stronie wikipedia https://en.wikipedia.org/wiki/K-means_clustering). Ma dużą złożoność, gdy ma do czynienia z wieloma punktami. Rozszerzenie K-means do postgresql http://pgxn.org/dist/kmeans/doc/kmeans.html jest napisane w C i skompilowane w maszynie bazy danych. Zapewnia to lepszą wydajność w porównaniu z procedurą w plpgsql. Niestety, ponieważ @estevao_lucas odpowiedział, to rozszerzenie nie jest włączone w Amazon RDS.

Jeśli naprawdę potrzebujesz efektu k-średnich, przetłumaczyłem tę implementację, stworzoną przez Joni Salonena w http://jonisalonen.com/2012/k-means-clustering-in-mysql/ i zmieniono na plpgsql https://gist.github.com/thiagomata/a9737c3455d6248bef9f. Ta funkcja używa tabeli tymczasowej. Można go zmienić, aby używał tylko tablic Pins, jeśli chcesz.

Ale jeśli potrzebujesz tylko szpilek na mapie, prawdopodobnie będziesz zadowolony z naprawdę szybkiej i prostszej funkcji, która grupuje wyniki w macierz [x, y]. Stworzyłem taką funkcję, ponieważ funkcja kmeans zabierała zbyt dużo czasu na przetwarzanie mojej bazy danych (z wieloma elementami ponad 400 000). Taka implementacja jest naprawdę szybsza, ale nie ma wszystkich funkcji, których można oczekiwać od modułu K-means. Poza tym ta funkcja siatki https://gist.github.com/thiagomata/18ea14853998468c1a1d zwraca bardzo dobre wyniki, gdy celem jest pokazanie dużej liczby pinów na mapie. Example of Grid Result

+0

Dziękujemy! Twoje funkcje są bardzo przydatne! Zdecydowałem, że nie używam k-średnich, ponieważ potrzebuję dynamicznego rozwiązania. I muszę zgrupować moje znaczniki po stronie serwera. Moje znaczniki są często filtrowane przez użytkowników. Moje rozwiązanie oparte na Quadtree. Każdy znacznik ma swój kod dziesiętny (łac., Lon są stałe). Możesz więc przesyłać zapytania i klastry za pomocą PostGis i małego zapytania SQL. – Anton

1

Możesz po prostu zainstalować obsługiwane rozszerzenia na Amazon RDS i Kmeans, nie jest to.

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 rozszerzenia:

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