rails postgres pgsql functions example ejemplo json postgresql hstore jsonb

pgsql - postgresql json example



Postgresql JSONB está llegando. ¿Qué usar ahora? Hstore? JSON? EAV? (2)

Probablemente no haya dado lo suficiente como para dar una respuesta muy detallada, pero le diré esto ... Si sus datos son "muy relacionales", creo que su mejor opción es construirlos con un buen diseño relacional. Si es solo un campo con "atributos asignados variables", entonces eso suena como un buen uso para un hstore. Que es bastante probado y cierto en este punto. He estado leyendo un poco en 9.4 y jsonb suena bien, pero eso no estará fuera por un tiempo. Sospecho que un buen diseño de esquema en 9.3 + un uso muy específico de hstore probablemente producirá una buena combinación de rendimiento y flexibilidad.

Después de pasar por el debate de investigación de DB / NoSQL relacional, llegué a la conclusión de que seguiré avanzando con PG como mi almacén de datos. Una gran parte de esa decisión fue el anuncio de que JSONB llegó a 9.4. Mi pregunta es: ¿qué debo hacer ahora, crear una aplicación desde el principio sabiendo que quiero migrar a (me refiero a usarlo ahora mismo) jsonb? Las opciones de DaaS para mí se ejecutarán 9.3 durante un tiempo.

Por lo que puedo decir, y corríjame si me equivoco, hstore se ejecutaría un poco más rápido ya que haré muchas consultas de muchas claves en la columna hstore y si tuviera que usar el json simple no lo haría No puedo aprovechar la indexación / GIN, etc. Sin embargo, podría aprovechar el anidamiento con json, pero ejecutar cualquier consulta sería muy lento y los usuarios se sentirían frustrados.

Entonces, ¿compilo mi aplicación alrededor de la versión actual del tipo de datos hstore o json, "good ol" EAV o algo más? ¿Debo estructurar mi DB y el código de la aplicación de una manera determinada? Cualquier consejo sería muy apreciado. Estoy seguro de que otros pueden enfrentar la misma pregunta mientras esperamos el próximo lanzamiento oficial de PostgreSQL.

Algunos detalles adicionales sobre la aplicación que quiero construir:

-Muy relacional (con una excepción abajo)
- Aspecto de la red social fuerte (grupos, amigos, me gusta, línea de tiempo, etc.)
- Basado en un solo objeto con atributos variables asignados por el usuario, tal vez 10 o 1000+ (aquí es donde entra en juego la necesidad de diseño sin esquema)

¡Gracias por adelantado por cualquier contribución!


Depende. Si espera tener una gran cantidad de usuarios, un volumen de transacciones muy alto o un número insano de recuperaciones de atributos por consulta, diría que use HSTORE. Sin embargo, si su aplicación se iniciará poco a poco y crecerá con el tiempo, o tendrá relativamente pocas transacciones que recuperen atributos, o solo capte algunas por consulta, luego use JSON. Incluso en el último caso, si no está obteniendo muchos atributos pero está marcando una o dos claves a menudo en la cláusula WHERE de sus consultas, puede crear un índice funcional para acelerar las cosas:

CREATE INDEX idx_foo_somekey ON foo((bar ->> ''somekey''));

Ahora, cuando tengas la WHERE bar ->> somekey , debería usar el índice.

Y, por supuesto, será más fácil usar datos anidados y actualizar a jsonb cuando esté disponible para usted.

Así que me inclino por JSON a menos que esté seguro de que va a patear el culo de su servidor con un uso intensivo de las recuperaciones de claves antes de tener la oportunidad de actualizar a 9.4. Pero para estar seguro de eso, diría, haga una evaluación comparativa con los volúmenes de consultas anticipadas ahora y vea qué funciona mejor para usted.