Cassandra jaki ORM?

0

Zamierzam użyć w swoim projekcie bazy danych Cassandra. Pytanie warto pchać się jakiś ORM dla ułatwienia pracy? Wyczytałem że Hibernate zbytnio się nie nadaję bo jest w wersji eksperymentalnej dla bazy Cassandra, natomiast podobno Kundera się jak najbardziej nadje. Może ktoś pomóc wiedzą i doświadczeniem?

0

Dość długo pracowałem z cassandrą w c++ i javie. W obu przypadkach używaliśmy CQL zamiast orma. Należy pamiętać, że cql jest bardzo podobny do sql ale pod spodem zupełnie inaczej to działa i w sumie wtedy nie było nic konkurencyjnego do zwykłych driverów. W obu przypadkach używaliśmy driverów od datastaxa. Jest też opcja cassandra + cassandra spark connector + spark ale ten temat tylko rozważaliśmy - wyniki były dość obiecujące ale szefostwo się niestety nie pozwoliło na refactoring archeologii.

0

Jak o Hibernate chodzi to chyba o Hibernate OGM? który jest w wersji eksperymentalnej. Co chyba odpada w przedbiegach.
Spring Data - nie wiem czego używa pod spodem, ale radzi sobie bardzo fajnie, tylko w zalezności od wersji wspiera Cassandre w wersji 2.X lub 3.X
CQL też spoko.

A powiesz do czego potrzebujecie Cassandry? Bo według mnie ta baza ma dość wąski use case do bardzo dużych ilości danych.

0

Oficjalny sterownik od Datastax ma wbudowanego prostego ORMa.
https://github.com/datastax/java-driver/tree/3.x/manual/object_mapper

0
Krolik napisał(a):

Oficjalny sterownik od Datastax ma wbudowanego prostego ORMa.

Datastax jest darmowy do użytku komercyjnego?

0

Sterownik? Tak. Apache V2.
https://github.com/datastax/java-driver

Copyright 2012-2015, DataStax

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
0

Czy dobrze robię wybierając bazę Cassandra do aplikacji z której będzie korzystać kilkadziesiąt tysięcy użytkowników. Aplikacja coś typu umieszczanie ogłoszeń i komentowanie ocenianie wyszukiwanie ogłoszeń itp. Zależy mi na dużej wydajności i dostępności.

0

Cassandra to przede wszystkim inna filozofia niż SQL i jeśli nie wiesz po co wybierasz Cassandrę to możesz się wpakować w bagno.
Wydajność, dostępność, replikacje -jak najbardziej... ale jak masz wyprany mózg przez SQL/RDBMS (jak większość) to Cie będzie bić po głowie. Choćby taki ORDER BY.
Jeśli masz coś zrobić na szybko i jest to twój/wasz pierwszy projekt z Cassandrą... to dobrze się zastanówcie.

Przećwicz najpierw na czymś małym.

0

Robię próby obecnie ORM Kundera i pojawia się problem. Mam encje testową:

@Entiity
@Table(name="TestEntity", schema = "KunderaTest@cassandra_pu")
public class TestEntiy {
@Column(name = "name")
private String name;
@Column(name = "surname")
private String surname;
@Embedded
private Address address;

setters/getters...
}
@Embeddable
public class Address implements Serializable {
@Column(name="City")
private String city;
@Column(name="Code")
private String code;

getters/setters...
}

Wywala mi błąd przy wyciąganiu danych z tabeli TestEntity:

21:08:08.274 [main] ERROR c.i.c.c.d.CassandraDataHandlerBase - Syntax error parsing '(org.apache.cassandra.db.marshal.UserType(KunderaExamples4,4164726573,6b6f74:org.apache.cassandra.db.marshal.UTF8Type,6d696173746f:org.apache.cassandra.db.marshal.UTF8Type))' at char 41: expecting ':' token
21:08:08.276 [main] ERROR c.i.c.c.d.CassandraDataHandlerBase - Eror while retrieving data, Caused by: .
com.impetus.kundera.KunderaException: Error while getting instance of UserType org.apache.cassandra.exceptions.SyntaxException: Syntax error parsing '(org.apache.cassandra.db.marshal.UserType(KunderaExamples4,4164726573,6b6f74:org.apache.cassandra.db.marshal.UTF8Type,6d696173746f:org.apache.cassandra.db.marshal.UTF8Type))' at char 41: expecting ':' token
	at com.impetus.client.cassandra.datahandler.CassandraDataHandlerBase.setUdtValue(CassandraDataHandlerBase.java:1300) ~[kundera-cassandra-3.4.jar:na]
	at com.impetus.client.cassandra.datahandler.CassandraDataHandlerBase.populateViaThrift(CassandraDataHandlerBase.java:1158) ~[kundera-cassandra-3.4.jar:na]
	at com.impetus.client.cassandra.datahandler.CassandraDataHandlerBase.onColumn(CassandraDataHandlerBase.java:1054) ~[kundera-cassandra-3.4.jar:na]
	at com.impetus.client.cassandra.datahandler.CassandraDataHandlerBase.populateEntity(CassandraDataHandlerBase.java:653) ~[kundera-cassandra-3.4.jar:na]
	at com.impetus.client.cassandra.CassandraClientBase$CQLClient.executeQuery(CassandraClientBase.java:2301) [kundera-cassandra-3.4.jar:na]
	at com.impetus.client.cassandra.CassandraClientBase.executeSelectQuery(CassandraClientBase.java:926) [kundera-cassandra-3.4.jar:na]
	at com.impetus.client.cassandra.thrift.ThriftClient.executeQuery(ThriftClient.java:1062) [kundera-cassandra-3.4.jar:na]
	at com.impetus.client.cassandra.query.CassQuery.populateEntities(CassQuery.java:153) [kundera-cassandra-3.4.jar:na]
	at com.impetus.kundera.query.QueryImpl.fetch(QueryImpl.java:1377) [kundera-core-3.4.jar:na]
	at com.impetus.kundera.query.QueryImpl.getResultList(QueryImpl.java:200) [kundera-core-3.4.jar:na]
	at com.prejch.MAin.main(MAin.java:39) [classes/:na]
21:08:08.277 [main] ERROR c.i.c.cassandra.CassandraClientBase - Error while executing native CQL query Caused by {}.
javax.persistence.PersistenceException: com.impetus.kundera.KunderaException: Error while getting instance of UserType org.apache.cassandra.exceptions.SyntaxException: Syntax error parsing '(org.apache.cassandra.db.marshal.UserType(KunderaExamples4,4164726573,6b6f74:org.apache.cassandra.db.marshal.UTF8Type,6d696173746f:org.apache.cassandra.db.marshal.UTF8Type))' at char 41: expecting ':' token
	at com.impetus.client.cassandra.datahandler.CassandraDataHandlerBase.populateEntity(CassandraDataHandlerBase.java:833) ~[kundera-cassandra-3.4.jar:na]
	at com.impetus.client.cassandra.CassandraClientBase$CQLClient.executeQuery(CassandraClientBase.java:2301) ~[kundera-cassandra-3.4.jar:na]
	at com.impetus.client.cassandra.CassandraClientBase.executeSelectQuery(CassandraClientBase.java:926) [kundera-cassandra-3.4.jar:na]
	at com.impetus.client.cassandra.thrift.ThriftClient.executeQuery(ThriftClient.java:1062) [kundera-cassandra-3.4.jar:na]
	at com.impetus.client.cassandra.query.CassQuery.populateEntities(CassQuery.java:153) [kundera-cassandra-3.4.jar:na]
	at com.impetus.kundera.query.QueryImpl.fetch(QueryImpl.java:1377) [kundera-core-3.4.jar:na]
	at com.impetus.kundera.query.QueryImpl.getResultList(QueryImpl.java:200) [kundera-core-3.4.jar:na]
	at com.prejch.MAin.main(MAin.java:39) [classes/:na]
Caused by: com.impetus.kundera.KunderaException: Error while getting instance of UserType org.apache.cassandra.exceptions.SyntaxException: Syntax error parsing '(org.apache.cassandra.db.marshal.UserType(KunderaExamples4,4164726573,6b6f74:org.apache.cassandra.db.marshal.UTF8Type,6d696173746f:org.apache.cassandra.db.marshal.UTF8Type))' at char 41: expecting ':' token
	at com.impetus.client.cassandra.datahandler.CassandraDataHandlerBase.setUdtValue(CassandraDataHandlerBase.java:1300) ~[kundera-cassandra-3.4.jar:na]
	at com.impetus.client.cassandra.datahandler.CassandraDataHandlerBase.populateViaThrift(CassandraDataHandlerBase.java:1158) ~[kundera-cassandra-3.4.jar:na]
	at com.impetus.client.cassandra.datahandler.CassandraDataHandlerBase.onColumn(CassandraDataHandlerBase.java:1054) ~[kundera-cassandra-3.4.jar:na]
	at com.impetus.client.cassandra.datahandler.CassandraDataHandlerBase.populateEntity(CassandraDataHandlerBase.java:653) ~[kundera-cassandra-3.4.jar:na]
	... 7 common frames omitted


O co chodzi?

0

Co do stosowania samego CQL, czy nie robimy wtedy z kodu sieczki skryptowej? Np tabele posiadające wiele kolumn i wstawianie tego do zapytanie.

0

A czemu nie uzyc Spring Data?

0
rav3n napisał(a):

A czemu nie uzyc Spring Data?

W sumie przetestuje wszystkie wariancje. Na chwilę obecną przetestowałęm Kundre (już sprawiła problem jak wyżej), sprawdziłem też datastax driver + mapper i sprawuje się bardzo dobrze, jeszcze zerkne na Spring Data.

0

wybór padł na Datastax driver + Datastax mapper. Kundera odpada ze względu problemów przy prostej encji, Spring Data też odpada ale to już tylko przez to że projekt nie będzie oparty na Springu więc bez sensu jest wpychać Springa tylko po to.

0
Uczynny Polityk napisał(a):

wybór padł na Datastax driver + Datastax mapper. Kundera odpada ze względu problemów przy prostej encji, Spring Data też odpada ale to już tylko przez to że projekt nie będzie oparty na Springu więc bez sensu jest wpychać Springa tylko po to.

a na czym oprzecie projekt jak nie na Springu ?

1 użytkowników online, w tym zalogowanych: 0, gości: 1