2012-09-06 17 views
6

Uso Python con SQLAlchemy para algunas tablas relacionales. Para el almacenamiento de algunas estructuras de datos más grandes uso Cassandra. Preferiría usar solo una tecnología (cassandra) en lugar de dos (cassandra y PostgreSQL). ¿Es posible almacenar los datos relacionales en Casandra también?¿Puedo usar SQLAlchemy con Cassandra CQL?

Respuesta

13

No, Cassandra es un sistema de almacenamiento NoSQL, y no es compatible con la semántica fundamental de SQL como, por ejemplo, las consultas SQL. SQLAlchemy funciona exclusivamente con sentencias de SQL. CQL es solo SQL, no es SQL en sí mismo.

citar the Cassandra CQL documentation:

Aunque CQL tiene muchas similitudes con SQL, hay algunas diferencias fundamentales. Por ejemplo, CQL se adapta al modelo de datos y la arquitectura de Cassandra, por lo que aún no se permiten operaciones similares a SQL, como JOIN o consultas de rango sobre filas en clústeres que usan el particionador aleatorio.

Usted, por supuesto libre para almacenar todos los sus datos en Casandra, pero eso significa que tiene que volver a pensar en cómo se almacenan los datos y encontrar de nuevo. No puede usar SQLAlchemy para mapear esos datos en objetos de Python.

+0

¿Pero no tiene cassandra compatibilidad con sql-like cql? – AME

+0

@AME: SQL-like no es lo mismo que SQL. :-) No hay operaciones JOIN, por ejemplo. –

3

playOrm admite JOIN en noSQL para que PUEDA poner datos relacionales en noSQL, pero actualmente está en Java. Hemos estado pensando en exponer un lenguaje S-SQL de un servidor para programas como el suyo. ¿Te interesaría eso?

El S-SQL sería el siguiente (si no se utiliza particiones, ni siquiera necesita algo antes de la pieza instrucción SELECT) ...

PARTITIONS t (t): Idpart SELECT FROM TABLE como t INNER JOIN t.security como s WHERE s.securityType =: type y t.numShares =: shares ")

Esto permite datos relacionales en un entorno noSQL Y SI realiza una partición de sus datos, puede escalar como muy bien con consultas rápidas y uniones rápidas.

Si lo desea, podemos codificar rápidamente un protocolo escriba el servidor que expone una interfaz a la que envía solicitudes S-SQL y le devolvemos alguna forma de json. Nos gustaría que fuera diferente a los conjuntos de resultados de SQL, lo cual era una muy mala idea cuando las uniones izquierda y las combinaciones internas están en la imagen.

es decir. volveríamos resultados en una unión como tal (por lo que se puede establecer un máximo resultados que realmente funciona ...)

tablaA fila A - TableB row45 - TableB row65 - fila TableB 78 tablaA la fila C - TableB row46 - tableB row93

AVISO de que no devolvemos varias filas A para que si tiene un resultado máximo 2 obtenga la fila A y la fila C donde, como en ODBC/JDBC, obtenga SOLAMENTE rowA dos veces con row45 y fila 65 porque así es como se ve la tabla cuando se devuelve (lo cual es algo estúpido cuando estás en un idioma OO de cualquier tipo).

simplemente hazle saber al equipo de PlayOrm si necesitas algo en el sitio web playOrm github.

Dean

+0

¿Podría ser utilizado con SQLAlchemy incluso en Java? – AME

+0

Nuestra idea es 'exponer' eventualmente una interfaz JDBC, por lo que la respuesta sería "sí, eventualmente". Nos gustaría ver que S-SQL esté integrado en todos los almacenes noSQL que sean externos a ellos. –

+0

y esa fue mi pregunta para usted ... sería interesante ... Debería haber dicho ODBC, no JDBC (es decir, eventualmente queremos exponer una conexión de lenguaje cruzado para todos los idiomas). –

Cuestiones relacionadas