Estoy siendo necesario el uso de una base de datos postgreSQL y va a sustituir a mi actual uso de berkeleyDB. Aunque, me doy cuenta de que esto no es una situación ideal, está más allá de mi control.

Así que la pregunta es… Si se requiere hacer de postgreSQL en un valor de la clave del almacén de cómo se podría ir sobre hacer esto, mientras que lo que es tan eficiente como sea posible?

Mis valores son matrices de bytes y mi clave son las cadenas, yo podría imponer algunas restricciones en la longitud de estas cadenas.

Supongo que debo usar un blob para mi el valor y la columna de clave principal de la celebración de la clave, pero como yo solo soy aventurarse en este viaje tengo curiosidad de saber si alguien en el desbordamiento de la pila de la comunidad ha hecho esto, o si hay algún ‘trampas’ que debo mirar hacia fuera para.

  • ¿Qué hace esas matrices de bytes representan en realidad? El contenido del archivo? Los objetos serializados? Otras personas?
  • En realidad son serializar objetos de actionscript se envían a un servidor… pero el código del servidor no sabe ni le importa lo que hay en ellos. Y sí, estoy de acuerdo en que esto es algo absurdo, el uso de una base de datos relacional como un valor clave de la tienda. Pero algunas de las ventajas de la utilización de la base de datos se mantienen, tales como la eficiencia de e / s de archivos, cifrado de acceso de los usuarios, restricciones, etc… Así que es realmente así de loco?
  • Sí. metabrew.com/article/…
  • Gracias por el enlace… sin duda me gustaría utilizar un cierto valor de la clave de la tienda, si es posible. No estoy seguro de si alguno de ellos está aprobado para ser utilizado en un departamento de defensa de proyecto, y tratando de obtener la aprobación es una preocupación, ya que no es una tarea oportuna. Voy a hacer un poco más la búsqueda.

4 Comentarios

  1. 21

    La extensión de Postgresql hacer correctamente este se llama hstore. Funciona de una manera similar como se puede esperar otra clave-valor en el almacén de los sistemas. Sólo tienes que cargar la extensión. La sintaxis es la única, pero si alguna vez has utilizado redis o mongo obtendrá rápidamente. No hacer más difícil de lo que es. Entiendo, que a menudo no llegar a recoger nuestras herramientas y tiene que hacer que hacer.

    Aquí está la página del documento:

    http://www.postgresql.org/docs/9.1/static/hstore.html

    • Esta es la respuesta correcta…
    • Aquí es cómo cargar la extensión. Tendrá que ser un DBA o superusuario. CREAR LA EXTENSIÓN DE HSTORE;
  2. 2

    Si usted está obligado a utilizar la base de datos relacional, yo sugeriría para tratar de encontrar la estructura de los datos para tomar ventaja del hecho de que, desde que renunciar a la ventaja de la velocidad que tienes con los datos no estructurados y almacén de claves y valores. El más estructura a encontrar, la mejor ventaja de salir de su difícil situación. Incluso si sólo se encuentran estructura en las teclas.

    También tenga en cuenta si usted sólo tendrá secuencial o aleatorio acceso a sus datos y en que proporción y estructura de su base de datos de este requisito. Vas a hacer consultas en sus valores por tipo, por ejemplo? Cada una de esas preguntas pueden tener efecto sobre la estructura de la base de datos.

    Una consideración específica acerca de blobs en postgresql que se representan internamente como pg_largetable (loid:oid,pageno:int4,de datos:bytea). El tamaño de los trozos se define por LOBBLKSIZE, pero normalmente 2k. Así que si usted puede utilizar matrices de bytes en la tabla en lugar de notas y limitar el tamaño de su valor y el par de claves en virtud del tamaño de bloque, puede evitar este direccionamiento indirecto a través de la segunda tabla. Usted también podría aumentar el tamaño de bloque si usted tiene acceso a la configuración de la base de datos.

    Te sugiero ir buscando la estructura de los datos y los patrones de acceso a datos y, a continuación, volver a hacer tu pregunta con más detalle.

  3. 0

    Lo que realmente debe ser depende de lo que la clave será. Si siempre será una cadena de 255 caracteres, a continuación, utilizar un tipo de datos Varchar como yoru PK y, a continuación, utilizar un blob (suponiendo un gran valor) para el valor. si siempre será un número, el uso de int, etc.

    En otras palabras, se necesita más información para realmente dar una buena respuesta 🙂

  4. 0

    ¿Qué se necesita para almacenar como un valor ? Las cadenas ? Enteros ? Objetos (por ejemplo, serializar objetos Java). Una simple aplicación de trabajar con una de la columna 3 de la tabla parecida a:

    NAME(VARCHAR)   TYPE(VARCHAR)   VALUE(VARCHAR)

    (tal vez el TIPO de algunos de enumeración). El de arriba no funciona para los datos binarios como serializada de los objetos, y aunque tal vez usted necesita un BLOB no.

    Alternativamente (y probablemente un mucho mejor idea), ha visto Configuración De Apache Commons ? Usted puede realizar que con una base de datos (a través de JDBC) y puede almacenar las propiedades de las que se recupera así:

    //get a property called 'number'
    Double double = config.getDouble("number");
    Integer integer = config.getInteger("number");

    Que puede ahorrar una gran cantidad de dolor en términos de implementación. Usted puede tienes un problema con el almacenamiento de datos binarios, en los que tendrías que serialise que antes de la inserción y posterior a la recuperación. Pero la he usado en el pasado para almacenar enteros,dobles y serializada de objetos Java a través de XStream, así que puedo confirmar que funciona bien.

Dejar respuesta

Please enter your comment!
Please enter your name here