Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP

Create keyspace or column family

Alex edited this page · 5 revisions
Clone this wiki locally

Astyanax provides a mechanism to programmatically create keyspaces and column families based on the Keyspace and ColumnFamily objects. The API will pick up the names and validators from the object but will allow for overrides in an operation Map<String, Object>. The API supports all properties supported by the CLI.

Keyspaces and column families may be created programmatically using either the Cluster interface or the Keyspace interface. Use the Cluster interface if your application needs a single connection pool to access the entire cluster. Use the Keyspace interface to operate on a specific keyspace.

Creating a keyspace

First, create the Keyspace client. The actual keyspace doesn’t have to exist in cassandra

AstyanaxContext<Keyspace> ctx = new AstyanaxContext.Builder()
    .forKeyspace("MyKeyspace")
    ... // Additional configuration parameters
    .buildKeyspace(ThriftFamilyFactory.getInstance());
ctx.start();
Keyspace keyspace = ctx.getClient();

Create the keyspace “MyKeyspace”

// Using simple strategy
keyspace.createKeyspace(ImmutableMap.<String, Object>builder()
    .put("strategy_options", ImmutableMap.<String, Object>builder()
        .put("replication_factor", "1")
        .build())
    .put("strategy_class",     "SimpleStrategy")
        .build()
     );

// Using network topology
keyspace.createKeyspace(ImmutableMap.<String, Object>builder()
    .put("strategy_options", ImmutableMap.<String, Object>builder()
        .put("us-east", "3");
        .put("eu-west", "3");
        .build())
    .put("strategy_class",     "NetworkTopologyStrategy")
    .build()
     );

Dropping a keyspace

Drop the keyspace “MyKeyspace”

keyspace.dropKeyspace();

Create a column family

public static ColumnFamily<String, String> CF_STANDARD1 = ColumnFamily
            .newColumnFamily("Standard1", StringSerializer.get(),
                    StringSerializer.get());

Create a column family using types from the ColumnFamily definition. StringSerializer translates to UTF8Type.

keyspace.createColumnFamily(CF_STANDARD1, null);

Create a column family but override the types

keyspace.createColumnFamily(CF_STANDARD1, ImmutableMap.<String, Object>builder()
        .put("default_validation_class", "UTF8Type")
        .put("key_validation_class",     "UTF8Type")
        .put("comparator_type",          "UTF8Type")
        .build());

Create a column family using type from the ColumnFamily definition and specify secondary indexes

keyspace.createColumnFamily(CF_STANDARD1, ImmutableMap.<String, Object>builder()
        .put("column_metadata", ImmutableMap.<String, Object>builder()
                .put("Index1", ImmutableMap.<String, Object>builder()
                        .put("validation_class", "UTF8Type")
                        .put("index_name",       "Index1")
                        .put("index_type",       "KEYS")
                        .build())
                .put("Index2", ImmutableMap.<String, Object>builder()
                        .put("validation_class", "UTF8Type")
                        .put("index_name",       "Index2")
                        .put("index_type",       "KEYS")
                        .build())
                 .build())
             .build());

Create a column family for composite comparator

Automatic formatting of the composite comparator hasn’t been implemented yet so the comparator_type must be specified manually.

keyspace.createColumnFamily(CF_COMPOSITE, ImmutableMap.<String, Object>builder()
        .put("default_validation_class", "UTF8Type")
        .put("key_validation_class",     "UTF8Type")
        .put("comparator_type",          "CompositeType(UTF8Type, LongType)")
        .build());

Dropping a column family

keyspace.dropColumnFamily(CF_COMPOSITE);
Something went wrong with that request. Please try again.