Estoy viendo dos posibilidades: sqlite y BerkeleyDB. Como mi caso de uso es claramente no relacional, estoy tentado para ir con BerkeleyDB, sin embargo no sé realmente sé cómo debo usarlo para almacenar mis registros, ya que solo almacena pares de clave/valor.
Lo que está describiendo es exactamente de lo que se trata la relación, incluso si solo necesita una tabla. SQLite probablemente hará esto muy fácil de hacer.
EDITAR: El modelo relacional no tiene nada que ver con las relaciones entre tablas. Una relación es un subconjunto del producto cartesiano de otros conjuntos. Por ejemplo, el producto cartesiano de los Números Reales, Números Reales y Números Reales (Sí, los tres son lo mismo) producen espacio de coordenadas 3d, y usted podría definir una relación sobre ese espacio con una fórmula, digamos x*y = z
. cada posible conjunto de coordenadas (x0,y0,z0)
están en la relación si satisfacen la fórmula dada, o si no lo están.
Una base de datos relacional utiliza este concepto con algunos requisitos adicionales. Primero, y lo más importante, el tamaño de la relación debe ser finito. La relación de producto dada anteriormente no satisface ese requisito, porque hay infinitamente muchas 3-tuplas que satisfacen la fórmula.Hay varias otras consideraciones que tienen más que ver con lo que es práctico o útil en las computadoras reales que resuelven problemas reales.
Una mejor forma de pensar sobre el problema es pensar dónde cada tipo de mecanismo de persistencia funciona mejor que el otro. Ya reconoce que una solución relacional tiene sentido cuando tiene muchos conjuntos de datos separados (tablas) que deben admitir las relaciones entre ellos (restricciones de clave externa), que es casi imposible de aplicar con un almacén de clave-valor. Otra ventaja real de relacional es la forma en que hace posibles consultas ricas y ad-hoc con el uso de índices apropiados. Esto es una consecuencia de que la capa de la base de datos realmente comprenda los datos que está representando.
Una tienda de valores clave tiene su propio conjunto de ventajas. Una de las más importantes es la forma en que las tiendas de valores clave se escalan. No es necesario que memcached, couchdb, hadoop utilicen el almacenamiento de clave-valor, ya que es fácil distribuir la búsqueda de valores-clave en varios servidores. Otra área en la que el almacenamiento de clave-valor funciona bien es cuando la clave o el valor es opaco, como cuando el elemento almacenado está encriptado, solo para ser leído por su propietario.
Para entender este punto, que una base de datos relacional funciona bien incluso cuando simplemente no necesita más de una tabla, tenga en cuenta lo siguiente (no originales)
SELECT t1.actor1
FROM workswith AS t1,
workswith AS t2,
workswith AS t3,
workswith AS t4,
workswith AS t5,
workswith AS t6
WHERE t1.actor2 = t2.actor1 AND
t2.actor2 = t3.actor1 AND
t3.actor2 = t4.actor1 AND
t4.actor2 = t5.actor1 AND
t5.actor2 = t6.actor1 AND
t6.actor2 = "Kevin Bacon";
Lo cual, obviamente, utiliza una sola tabla: workswith
para calcular cada actor con un número de tocino de 6
¡Gracias a todos ustedes por sus respuestas muy útiles! Elegir uno mejor fue realmente difícil: -/ –