blob: d69cbd86954cea1147f9e63882f52a3e8449c023 [file] [log] [blame]
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file
to you 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.
-->
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="author" content="dev@gora.apache.org" />
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
<meta name="Description" content="Apache Gora -- Gora Cassandra Module" />
<meta name="Keywords" content="Apache Gora NoSQL Framework" />
<meta name="Owner" content="dev@gora.apache.org" />
<meta name="Robots" content="index, follow" />
<meta name="Security" content="Public" />
<meta name="Source" content="wiki template" />
<meta
name="DC.Rights"
content="Copyright 2010-2024, The Apache Software Foundation"
/>
<link href="/resources/css/bootstrap.min.css" rel="stylesheet" />
<!-- Fav and touch icons -->
<link
rel="apple-touch-icon-precomposed"
sizes="144x144"
href="http://twitter.github.com/bootstrap/assets/ico/apple-touch-icon-144-precomposed.png"
/>
<link
rel="apple-touch-icon-precomposed"
sizes="114x114"
href="http://twitter.github.com/bootstrap/assets/ico/apple-touch-icon-114-precomposed.png"
/>
<link
rel="apple-touch-icon-precomposed"
sizes="72x72"
href="http://twitter.github.com/bootstrap/assets/ico/apple-touch-icon-72-precomposed.png"
/>
<link
rel="apple-touch-icon-precomposed"
href="http://twitter.github.com/bootstrap/assets/ico/apple-touch-icon-57-precomposed.png"
/>
<link rel="shortcut icon" href="/resources/img/feather-small.png" />
<title>Apache Gora&trade; - Gora Cassandra Module</title>
</head>
<body style="padding-top: 100px">
<nav class="navbar navbar-expand-lg navbar-dark bg-dark fixed-top shadow-lg">
<div class="container-fluid">
<a class="navbar-brand" href="/index.html"
><img
src="/resources/img/gora-logo.png"
alt="Apache Gora"
title="Apache Gora"
height="50px"
/></a>
<button
class="navbar-toggler"
type="button"
data-bs-toggle="collapse"
data-bs-target="#navbarNav"
aria-controls="navbarNav"
aria-expanded="false"
aria-label="Toggle navigation"
>
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav me-auto">
<li class="nav-item">
<a class="nav-link" href="/downloads.html">Downloads</a>
</li>
<li class="nav-item dropdown">
<a
class="nav-link dropdown-toggle"
href="#"
id="navbarDropdown1"
role="button"
data-bs-toggle="dropdown"
aria-expanded="false"
>Community</a
>
<ul class="dropdown-menu" aria-labelledby="navbarDropdown1">
<li>
<a
class="dropdown-item"
href="https://whimsy.apache.org/board/minutes/Gora.html"
>Board Reporting</a
>
</li>
<li>
<a class="dropdown-item" href="/contribute.html"
>Contribute</a
>
</li>
<li>
<a class="dropdown-item" href="/mailing_lists.html"
>Mailing Lists</a
>
</li>
<li>
<a class="dropdown-item" href="/credits.html">People</a>
</li>
<li>
<a class="dropdown-item" href="/related.html"
>Related Projects</a
>
</li>
</ul>
</li>
<li class="nav-item dropdown">
<a
class="nav-link dropdown-toggle"
href="#"
id="navbarDropdown2"
role="button"
data-bs-toggle="dropdown"
aria-expanded="false"
>Documentation</a
>
<ul class="dropdown-menu" aria-labelledby="navbarDropdown2">
<li><a class="dropdown-item" href="/about.html">About</a></li>
<li>
<a class="dropdown-item" href="/current/index.html"
>Current Documentation</a
>
</li>
<li>
<a class="dropdown-item" href="/current/api/javadoc.html"
>JavaDoc Documentation</a
>
</li>
<li>
<a class="dropdown-item" href="/current/tutorial.html"
>Gora Tutorial</a
>
</li>
<li>
<a
class="dropdown-item"
href="https://cwiki.apache.org/confluence/display/GORA/"
>Gora Wiki</a
>
</li>
</ul>
</li>
<li class="nav-item dropdown">
<a
class="nav-link dropdown-toggle"
href="#"
id="navbarDropdown3"
role="button"
data-bs-toggle="dropdown"
aria-expanded="false"
>Development</a
>
<ul class="dropdown-menu" aria-labelledby="navbarDropdown3">
<li>
<a
class="dropdown-item"
href="https://issues.apache.org/jira/browse/GORA"
>Issue Tracking</a
>
</li>
<li>
<a class="dropdown-item" href="/mailing_lists.html"
>Mailing Lists</a
>
</li>
<li>
<a class="dropdown-item" href="/version_control.html"
>Version Control</a
>
</li>
<li>
<a class="dropdown-item" href="/roadmap.html">Roadmap</a>
</li>
</ul>
</li>
<li class="nav-item dropdown">
<a
class="nav-link dropdown-toggle"
href="#"
id="navbarDropdown4"
role="button"
data-bs-toggle="dropdown"
aria-expanded="false"
>
<img
src="/resources/img/feather-small.png"
alt="Apache"
title="Apache"
/>
</a>
<ul class="dropdown-menu" aria-labelledby="navbarDropdown4">
<li>
<a class="dropdown-item" href="http://www.apache.org"
>Apache Home</a
>
</li>
<li>
<a
class="dropdown-item"
href="http://www.apache.org/licenses/"
>Apache License</a
>
</li>
<li>
<a
class="dropdown-item"
href="http://www.apache.org/security/"
>Security</a
>
</li>
<li>
<a
class="dropdown-item"
href="http://www.apache.org/foundation/sponsorship.html"
>Support</a
>
</li>
<li>
<a
class="dropdown-item"
href="http://www.apache.org/foundation/thanks.html"
>Thanks</a
>
</li>
</ul>
</li>
</ul>
</div>
</div>
</nav>
<div class="container top-buffer" id="Gora_Gora Cassandra Module">
<h2 id="overview">Overview<a class="headerlink" href="#overview" title="Permalink">&para;</a></h2>
<p>This is the main documentation for the gora-cassandra module which
enables <a href="http://cassandra.apache.org">Apache Cassandra</a> backend support for Gora.</p>
<div id="toc"><ul><li><a class="toc-href" href="#goraproperties" title="gora.properties">gora.properties</a></li><li><a class="toc-href" href="#gora-cassandra-mappings" title="Gora Cassandra mappings">Gora Cassandra mappings</a></li></ul></div>
<h2 id="goraproperties">gora.properties<a class="headerlink" href="#goraproperties" title="Permalink">&para;</a></h2>
<table class="table">
<thead>
<tr>
<th align="left">Property Key</th>
<th align="left">Property Value</th>
<th align="left">Required</th>
<th align="left">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>gora.datastore.default=</td>
<td>org.apache.gora.cassandra.store.CassandraStore</td>
<td>Yes</td>
<td>Implementation of the persistent Java storage class</td>
</tr>
<tr>
<td>gora.cassandrastore.mapping.file=</td>
<td>/path/to/gora-cassandra-mapping.xml</td>
<td>No</td>
<td>The XML mapping file to be used. If no value is used this defaults to <code>gora-cassandra-mapping.xml</code></td>
</tr>
<tr>
<td>gora.cassandrastore.cassandraServers=</td>
<td>localhost</td>
<td>Yes</td>
<td>This value should specify the host for a running Cassandra server or node. In this case the server happens to be running on localhost which is the default Cassandra server configuration.</td>
</tr>
<tr>
<td>gora.cassandrastore.port=</td>
<td>9042</td>
<td>Yes</td>
<td>This value should specify the cql port for a running Cassandra server or node. In this case the server happens to be running on 9042 port which is the default Cassandra server configuration.</td>
</tr>
<tr>
<td>gora.cassandrastore.clusterName=</td>
<td>Test Cluster</td>
<td>No</td>
<td>This value should specify the cassandra cluster name for a running Cassandra server or node. In this case the server has configured to run with Cassandra cluster name as 'Test Cluster' which is the default Cassandra server configuration.</td>
</tr>
<tr>
<td>gora.cassandrastore.username=</td>
<td>${username}</td>
<td>No</td>
<td>The authentication details for passing a <b>username</b> to the CassandraHostConfigurator. This will be required if security is required for Cassandra reads and writes.</td>
</tr>
<tr>
<td>gora.cassandrastore.password=</td>
<td>${password}</td>
<td>No</td>
<td>The authentication details for passing a <b>password</b> to the CassandraHostConfigurator. This will be required if security is required for Cassandra reads and writes.</td>
</tr>
<tr>
<td>gora.cassandrastore.cassandraSerializationType=</td>
<td>AVRO/NATIVE</td>
<td>No</td>
<td>The serialization type for persist into the cassandra data store. default value is Native serialization type</td>
</tr>
</tbody>
</table>
<h2 id="gora-cassandra-mappings">Gora Cassandra mappings<a class="headerlink" href="#gora-cassandra-mappings" title="Permalink">&para;</a></h2>
<p>Say we wished to map some CassandraRecord data and store it into the CassandraStore.</p>
<pre><code>&lt;gora-otd&gt;
&lt;keyspace name="RecordKeySpace" durableWrite="false"&gt;
&lt;placementStrategy name="SimpleStrategy" replication_factor="1"/&gt;
&lt;/keyspace&gt;
&lt;class name="org.apache.gora.cassandra.example.generated.AvroSerialization.CassandraRecord"
keyClass="org.apache.gora.cassandra.example.generated.AvroSerialization.CassandraKey"
keyspace="RecordKeySpace"
table="CassandraRecord" allowFiltering="true" id="5a1c395e-b41f-11e5-9f22-ba0be0483c18"&gt;
&lt;field name="name" column="name" type="text"/&gt;
&lt;field name="dataInt" column="age" type="int"/&gt;
&lt;field name="salary" column="salary" type="bigint"/&gt;
&lt;field name="dataDouble" column="testDouble" type="double"/&gt;
&lt;field name="dataBytes" column="quotes" type="blob"/&gt;
&lt;field name="arrayInt" column="listInt" type="list(int)"/&gt;
&lt;field name="arrayString" column="listString" type="list(text)"/&gt;
&lt;field name="arrayLong" column="listLong" type="list(bigint)"/&gt;
&lt;field name="arrayDouble" column="listDouble" type="list(double)"/&gt;
&lt;field name="mapInt" column="mapInt" type="map(text,int)"/&gt;
&lt;field name="mapString" column="mapString" type="map(text,text)"/&gt;
&lt;field name="mapLong" column="mapLong" type="map(text,bigint)"/&gt;
&lt;field name="mapDouble" column="mapDouble" type="map(text,double)"/&gt;
&lt;/class&gt;
&lt;cassandraKey name="org.apache.gora.cassandra.example.generated.AvroSerialization.CassandraKey"&gt;
&lt;partitionKey&gt;
&lt;field name="url" column="urlData" type="text"/&gt;
&lt;field name="timestamp" column="timestampData" type="bigint"/&gt;
&lt;/partitionKey&gt;
&lt;clusterKey&gt;
&lt;key column="timestampData" order="desc"/&gt;
&lt;/clusterKey&gt;
&lt;/cassandraKey&gt;
&lt;/gora-otd&gt;
</code></pre>
<p>Here you can see that we require the definition of two child elements within the
<code>gora-otd</code> mapping configuration, namely;</p>
<p>The <b>keyspace</b> element; where we specify:</p>
<ol>
<li>
<p>a parameter containing the Cassandra keyspace schema name e.g. <b>RecordKeySpace</b>,</p>
</li>
<li>
<p>a parameter containing the durable write enabled property in the Cassandra keyspace e.g. <b>false</b>, More about durable write can be found <a href="http://docs.datastax.com/en/cassandra/2.1/cassandra/dml/dml_durability_c.html">here</a>.</p>
</li>
<li>
<p>the child element <b>placementStrategy</b> containing the Cassandra placementStrategy details, a parameter containing the Cassandra placement strategy name, e.g. <b>SimpleStrategy</b>, gora-cassandra will use SimpleStrategy by default if no value for this attribute is specified. More about placement strategies can be found <a href="http://docs.datastax.com/en/archived/cassandra/2.0/cassandra/architecture/architectureDataDistributeReplication_c.html">here</a>.</p>
</li>
<li>
<p>a parameter containing a <b>replicationFactor</b> attribute with value integer. Again the replicationFactor value associated with the Keyspace tag
will only apply if Gora creates the Keyspace and will have no effect if this is being used against
an existing keyspace. the default value for 'replicationFactor' is '1'.</p>
</li>
</ol>
<p>The <b>class</b> element specifying persistent fields which values should map to. This element contains;</p>
<ol>
<li>
<p>a parameter containing the Persistent class name e.g. <b>org.apache.gora.cassandra.example.generated.AvroSerialization.CassandraRecord</b>,</p>
</li>
<li>
<p>a parameter containing the keyClass e.g. <b>org.apache.gora.cassandra.example.generated.AvroSerialization.CassandraKey</b> which specifies the keys which map to the field values,</p>
</li>
<li>
<p>a parameter containing the keyspace e.g. <b>RecordKeySpace</b> which matches to the above keyspace definition,</p>
</li>
<li>
<p>a parameter containing the table name e.g. <b>CassandraRecord</b>,</p>
</li>
<li>
<p>a parameter containing the allow filtering e.g. <b>true</b>, More about allow filtering can be found <a href="https://www.datastax.com/dev/blog/allow-filtering-explained-2">here</a>.</p>
</li>
<li>
<p>a child element(s) <b>field</b> which represent fields which are to be persisted into Cassandra. These need to be configured such that they receive the following;</p>
<p>finally a parameter <b>name</b> e.g. (name, dateOfBirth, ssn and salary respectively) which map to Gora field name,</p>
<p>a parameter containing the column name e.g. <b>name</b>,</p>
<p>a parameter containing the data type of the column e.g. <b>text</b>,</p>
<p>an optional parameter <b>primarykey</b>, which indicates the primary key.</p>
</li>
</ol>
<p>The <b>cassandraKey</b> element specifying composite key fields which is used in keyClass, This is optional, this element should be added only when composite keys are available;</p>
<ol>
<li>
<p>a child element(s) <b>partitionKey</b> which represent cassandra partition key</p>
<p>a child element(s) <b>compositeKey</b> which represent cassandra composite partition key</p>
<p>a child element(s) <b>field</b> which represent partition key fields which are to be persisted into Cassandra. These need to be configured such that they receive the following;</p>
<p>a parameter <b>name</b> e.g. (name, dateOfBirth, ssn and salary respectively) which map to Gora field name,</p>
<p>a parameter containing the column name e.g. <b>name</b>,</p>
<p>a parameter containing the data type of the column <b>text</b>,</p>
</li>
<li>
<p>a child element(s) <b>clusterKey</b> which represent cassandra cluster key</p>
<p>a child element(s) <b>key</b> which represents column key fields which needs to be add clustered key.</p>
<p>a parameter containing the column name e.g. <b>name</b>,</p>
<p>a parameter containing the Order type of the column to be applied e.g. <b>desc</b>,</p>
</li>
</ol>
</div>
<!-- /container (main block) -->
<hr />
<div class="container">
<footer>
<p>
Copyright © 2010-2024 The Apache Software Foundation.
Licensed under
<a href="http://www.apache.org/licenses/LICENSE-2.0"
>Apache License 2.0</a
>.
</p>
<p>
Apache Gora, Gora, Apache, the Apache feather logo, and the Apache
Gora project logo are trademarks of The Apache Software Foundation.
</p>
</footer>
</div>
<!-- /container -->
<script src="/resources/js/bootstrap.bundle.min.js"></script>
<script type="text/javascript">
stLight.options({
publisher: "4059fafd-3891-49f9-8c96-e4100290d8e6",
doNotHash: false,
doNotCopy: false,
hashAddressBar: false,
});
</script>
<script src="//cdn.jsdelivr.net/gh/highlightjs/cdn-release@11.0.1/build/highlight.min.js"></script>
<script>
hljs.highlightAll();
</script>
</body>
</html>