Suite

Déplacer la base de données PostGIS pour les médias sociaux vers Cassandra ?

Déplacer la base de données PostGIS pour les médias sociaux vers Cassandra ?


J'ai actuellement une base de données importante et croissante de médias géo-sociaux. J'utilise Postgres avec postgis, et jusqu'à présent, tout s'est bien passé.

Mon cas d'utilisation jusqu'à présent a été d'interroger la base de données pour tous les messages dans des zones spécifiques, comme chaque tweet dans chaque message/code postal aux États-Unis/au Canada (ou d'autres frontières - les messages ne sont pas géocodés par rapport au message /code postal. La sélection se fait par intersection de coordonnées).

Dans le passé, c'était relativement rapide et facile à faire, cependant, maintenant que mon tableau de données a atteint plus de 350 millions de messages, mes requêtes prennent une éternité. Chaque code postal peut prendre jusqu'à une journée pour récupérer les tweets à partir de sa géométrie.

Je suis actuellement en train de débattre de ce qu'il faut faire ensuite. Je connais quelques solutions, mais je suis curieux de savoir ce que vous en pensez et si j'oublie quelque chose.

  1. jeter plus de mémoire à postgres et réduire la recherche sur le disque. J'y travaille actuellement, mais je me demande si c'est une bonne solution à long terme.

  2. trouver un meilleur moyen de partitionner les données en plusieurs tables. Actuellement, tous mes messages sont dans la même table, avec chaque colonne indexée. Étant donné que je dois rechercher dans tous les messages pour trouver ceux dans les zones données, est-ce la mauvaise façon de le faire ?

  3. créer un hybride de Cassandra-PostGIS. Stockez en masse mes données dans Cassandra, puis extrayez à peu près les données dont j'ai besoin (par exemple, un État/une province à la fois) dans une table de données intermédiaires dans PostGIS, puis interrogez des codes post/zip individuels à l'aide de PostGIS. Est-ce exagéré/horriblement inefficace ? J'ai examiné Postgres-XL, mais il a été rejeté par d'autres dans ce projet pour des problèmes de coût.


utilisez "explain" (http://www.postgresql.org/docs/9.3/static/sql-explain.html) pour voir si votre index spatial est utilisé, et assurez-vous que vous avez exécuté "analyze" (http: //www.postgresql.org/docs/9.3/static/sql-analyze.html) pour vous assurer que la base de données a collecté suffisamment de statistiques sur vos index.

Il me semble que vous ne savez pas ce que vous faites en ce qui concerne la planification des requêtes. Il n'est généralement pas recommandé d'indexer chaque colonne. Par exemple, si vous savez que les requêtes spatiales réduiront le nombre d'éléments à un petit nombre, utilisez simplement l'espace. Si le temps fait un meilleur travail que l'espace, alors utilisez-le. Utilisez ensuite des sous-sélections ou des instructions pour explorer encore plus loin.

Mais vraiment, passer du temps à jouer avec « expliquer » améliorera grandement votre compréhension de ce que fait le moteur.


Je suis d'accord avec les autres commentaires, pour que ce soit aussi lent, vous ne devez pas avoir correctement l'indexation de la configuration. Comment stockez-vous les données ? Utilisez-vous JSON ? Vous devez disposer de colonnes ou d'index spatiaux pour que les requêtes fonctionnent rapidement.

Consultez les liens ci-dessous pour des exemples d'indexation spatiale des données Twitter JSON.

http://bibhas.in/blog/postgresql-swag-json-data-type-and-working-with-twitter-data/ http://bibhas.in/blog/postgresql-swag-part-2-indexing- json-data-type-and-full-text-search/


Voir la vidéo: Créer une base de données ACCESS