cassandra data access
DESCRIPTION
from Netherlands Cassandra Users Meet Up 28 May 2013TRANSCRIPT
![Page 1: Cassandra data access](https://reader035.vdocuments.us/reader035/viewer/2022062513/5562f67ad8b42a6f598b4728/html5/thumbnails/1.jpg)
*
Cassandra Data Access in Java
![Page 2: Cassandra data access](https://reader035.vdocuments.us/reader035/viewer/2022062513/5562f67ad8b42a6f598b4728/html5/thumbnails/2.jpg)
*
eBuddy use of Cassandra
![Page 3: Cassandra data access](https://reader035.vdocuments.us/reader035/viewer/2022062513/5562f67ad8b42a6f598b4728/html5/thumbnails/3.jpg)
*
XMS
![Page 4: Cassandra data access](https://reader035.vdocuments.us/reader035/viewer/2022062513/5562f67ad8b42a6f598b4728/html5/thumbnails/4.jpg)
*
● User Data Service● User Discovery Service● Persistent Session Store● Message History● Location-based Discovery
Cassandra ineBuddy Messaging Platform
![Page 5: Cassandra data access](https://reader035.vdocuments.us/reader035/viewer/2022062513/5562f67ad8b42a6f598b4728/html5/thumbnails/5.jpg)
*
● Current size of data● 1,4 TiB total (replication of 3x); 467 GiB actual data
● 12 million sessions (11 million users plus groups)
● Almost a billion rows in one column family(inverse social graph)
Some Statistics
![Page 6: Cassandra data access](https://reader035.vdocuments.us/reader035/viewer/2022062513/5562f67ad8b42a6f598b4728/html5/thumbnails/6.jpg)
*
Data Access - Overview
![Page 7: Cassandra data access](https://reader035.vdocuments.us/reader035/viewer/2022062513/5562f67ad8b42a6f598b4728/html5/thumbnails/7.jpg)
*
Design Objectives
● Data Source Agnostic● Testable● Thread Safe● Strong Typing● Supports “transactions”, i.e. units of work in batch● Efficient Mapping to Application Domain Model● Follows Familiar Patterns (e.g. Spring JDBC Template)
![Page 8: Cassandra data access](https://reader035.vdocuments.us/reader035/viewer/2022062513/5562f67ad8b42a6f598b4728/html5/thumbnails/8.jpg)
*
Data Access in Layers
![Page 9: Cassandra data access](https://reader035.vdocuments.us/reader035/viewer/2022062513/5562f67ad8b42a6f598b4728/html5/thumbnails/9.jpg)
*
“Operations” Layer
![Page 10: Cassandra data access](https://reader035.vdocuments.us/reader035/viewer/2022062513/5562f67ad8b42a6f598b4728/html5/thumbnails/10.jpg)
*
Writing
● Use Generic Typing
● Has Interface(for testability, etc.)
● Handles Exceptions
![Page 11: Cassandra data access](https://reader035.vdocuments.us/reader035/viewer/2022062513/5562f67ad8b42a6f598b4728/html5/thumbnails/11.jpg)
*
Reading● Use Mappers
![Page 12: Cassandra data access](https://reader035.vdocuments.us/reader035/viewer/2022062513/5562f67ad8b42a6f598b4728/html5/thumbnails/12.jpg)
*
Serializers● Constructed with serializers that convert to types needed by data access layer
![Page 13: Cassandra data access](https://reader035.vdocuments.us/reader035/viewer/2022062513/5562f67ad8b42a6f598b4728/html5/thumbnails/13.jpg)
*
Reading
![Page 14: Cassandra data access](https://reader035.vdocuments.us/reader035/viewer/2022062513/5562f67ad8b42a6f598b4728/html5/thumbnails/14.jpg)
*
Data Access Layer
![Page 15: Cassandra data access](https://reader035.vdocuments.us/reader035/viewer/2022062513/5562f67ad8b42a6f598b4728/html5/thumbnails/15.jpg)
*
Data Access Object● Data Access Object (DAO) is singleton● Transforms from data model to domain model● Operations object configured with serializers to convert from data model to domain model
● Defines the mappers for read operations
![Page 16: Cassandra data access](https://reader035.vdocuments.us/reader035/viewer/2022062513/5562f67ad8b42a6f598b4728/html5/thumbnails/16.jpg)
*
Next Steps
![Page 17: Cassandra data access](https://reader035.vdocuments.us/reader035/viewer/2022062513/5562f67ad8b42a6f598b4728/html5/thumbnails/17.jpg)
*
CQL3
DataStax:"We believe that CQL3 is a simpler and overall better API for Cassandra than the thrift API is. Therefore, new projects/applications are encouraged to use CQL3"
At eBuddy, we are still using the Thrift API and the Java Hector library.
We are currently looking at CQL3 and whether we want to use it going forward and whether we will "upgrade" existing code.
![Page 18: Cassandra data access](https://reader035.vdocuments.us/reader035/viewer/2022062513/5562f67ad8b42a6f598b4728/html5/thumbnails/18.jpg)
*
Structured Data
● Object Mapping Frameworks● Mapped vs. Embedded Objects
● Nested Properties ("path" access)
![Page 19: Cassandra data access](https://reader035.vdocuments.us/reader035/viewer/2022062513/5562f67ad8b42a6f598b4728/html5/thumbnails/19.jpg)
*
Object Mapping Frameworks
● Simple mapper frameworks with (some) JPA support● Hector Object Mapper ● Kundera
● Firebrand (not JPA) ● has most features,
e.g supports both embedded and mapped object graphs
https://github.com/impetus-opensource/Kundera
http://github.com/hector-client/hector
http://firebrandocm.org
![Page 20: Cassandra data access](https://reader035.vdocuments.us/reader035/viewer/2022062513/5562f67ad8b42a6f598b4728/html5/thumbnails/20.jpg)
*
Hierarchical Properties
● Use DynamicComposites to model keys that have a variable number of components
put(“accounts|msn|x.y.z|sign_in”, “0”);put(“accounts|msn|x.y.z|key”, “value”);
get(“accounts”) --> retrieved as a map:
{"accounts": { "msn": { "x.y.z": { "sign_in": "0", "key": "value" } } } }
● Use a slice query to retrieve properties using partial path:
![Page 21: Cassandra data access](https://reader035.vdocuments.us/reader035/viewer/2022062513/5562f67ad8b42a6f598b4728/html5/thumbnails/21.jpg)
*
Questions?
XMSUnlimited messaging. Better. Free.
We're Hiring!
Download XMS now: