[2013.11.21 Comment]
현재 Cassandra standalone은 버그가 많아서 쓸 수 없다. 따로 Cassandra를 두어 테스트를 해야 한다.
Casandra unit이 잘 개발되길 조금 기다려야 한다.
-------------------------
cassandra 2.0 java 유닛 테스트를 하려면 2가지 방법을 사용할 수 있다.
1. 테스트용 cassandra 를 local로 설치해 테스트하는 방법
2. cassandra 가 standalone 데몬으로 실행되고 unit test를 쉽게 할 수 있는 방법 (내가 선택한 방법)
1번은 전형적인 방법으로 많이들 쓰고 있다. DB 를 사용하는 dao 또는 batch에서는 transaction rollback 방식을 사용하거나 mock을 이용하는 방법으로 테스트를 진행하고 있다. 그런데 상당히 이런 작업이 불편하다. 개발 서버에 있는 내용과 테스트케이스가 다를 수 있고, 스키마도 다를 수 있다.
그동안 상당히 귀찮았다.
DB가 java daemonize되는 부분이 분명 존재하는 것이라 생각했는데, 마침 cassandra에서는 그런 것이 있었다.
이름 하여 cassandra-uni 이라는 github프로젝트가 있다.
https://github.com/jsevellec/cassandra-unit
cassandra 1.x대는 지원되고 있지만, cassandra 2.0도 지원계획을 가지고 있다.
https://github.com/jsevellec/cassandra-unit/issues/70
cassandra 1.x는 잘 지원되니 큰 문제는 없으나 2.0은 현재 약간의 이슈가 있지만, 조금만 피해가면 잘 테스트가 가능하다.
(아래 소스를 참조하면 된다. )
https://github.com/gibffe/cassyunit-2.0-test/tree/master
CQLDataLoader 가 잘 동작하지 않아서 수동으로 schema를 cql 파일을 로딩하지 못해서, hector나 astyanax 를 이용해서 schema 만드는 작업은 작업을 해야 할듯 하다. 아니면 좀더 잘 될 때까지 기다려야 한다.
나머지는 잘동작되는 것 같다. 위의 github를 다운받아 조금 수정했다.
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.sulaco</groupId>
<artifactId>cassyunit-test</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>cassyunit-test</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<repositories>
<repository>
<id>sonatype</id>
<url>http://oss.sonatype.org/content/repositories/snapshots</url>
</repository>
</repositories>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.7.5</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.cassandraunit</groupId>
<artifactId>cassandra-unit</artifactId>
<version>2.0.2.0-SNAPSHOT</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.yaml</groupId>
<artifactId>snakeyaml</artifactId>
<version>1.13</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<version>1.5.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.datastax.cassandra</groupId>
<artifactId>cassandra-driver-core</artifactId>
<version>2.0.0-beta1</version>
</dependency>
</dependencies>
</project>
cassandra.yaml - 기존에 실행되고 있는 cassandra 과 충돌나게 하지 않기 위해서 port 번호를 변경했다.
# Cassandra storage config YAML
# NOTE:
# See http://wiki.apache.org/cassandra/StorageConfiguration for
# full explanations of configuration directives
# /NOTE
# The name of the cluster. This is mainly used to prevent machines in
# one logical cluster from joining another.
cluster_name: 'cassy-1'
# This defines the number of tokens randomly assigned to this node on the ring
# The more tokens, relative to other nodes, the larger the proportion of data
# that this node will store. You probably want all nodes to have the same number
# of tokens assuming they have equal hardware capability.
#
# If you leave this unspecified, Cassandra will use the default of 1 token for legacy compatibility,
# and will use the initial_token as described below.
#
# Specifying initial_token will override this setting.
#
# If you already have a cluster with 1 token per node, and wish to migrate to
# multiple tokens per node, see http://wiki.apache.org/cassandra/Operations
num_tokens: 256
# initial_token allows you to specify tokens manually. While you can use # it with
# vnodes (num_tokens > 1, above) -- in which case you should provide a
# comma-separated list -- it's primarily used when adding nodes # to legacy clusters
# that do not have vnodes enabled.
# initial_token:
# See http://wiki.apache.org/cassandra/HintedHandoff
hinted_handoff_enabled: true
# this defines the maximum amount of time a dead host will have hints
# generated. After it has been dead this long, new hints for it will not be
# created until it has been seen alive and gone down again.
max_hint_window_in_ms: 10800000 # 3 hours
# Maximum throttle in KBs per second, per delivery thread. This will be
# reduced proportionally to the number of nodes in the cluster. (If there
# are two nodes in the cluster, each delivery thread will use the maximum
# rate; if there are three, each will throttle to half of the maximum,
# since we expect two nodes to be delivering hints simultaneously.)
hinted_handoff_throttle_in_kb: 1024
# Number of threads with which to deliver hints;
# Consider increasing this number when you have multi-dc deployments, since
# cross-dc handoff tends to be slower
max_hints_delivery_threads: 2
# The following setting populates the page cache on memtable flush and compaction
# WARNING: Enable this setting only when the whole node's data fits in memory.
# Defaults to: false
# populate_io_cache_on_flush: false
# Authentication backend, implementing IAuthenticator; used to identify users
# Out of the box, Cassandra provides org.apache.cassandra.auth.{AllowAllAuthenticator,
# PasswordAuthenticator}.
#
# - AllowAllAuthenticator performs no checks - set it to disable authentication.
# - PasswordAuthenticator relies on username/password pairs to authenticate
# users. It keeps usernames and hashed passwords in system_auth.credentials table.
# Please increase system_auth keyspace replication factor if you use this authenticator.
authenticator: AllowAllAuthenticator
# Authorization backend, implementing IAuthorizer; used to limit access/provide permissions
# Out of the box, Cassandra provides org.apache.cassandra.auth.{AllowAllAuthorizer,
# CassandraAuthorizer}.
#
# - AllowAllAuthorizer allows any action to any user - set it to disable authorization.
# - CassandraAuthorizer stores permissions in system_auth.permissions table. Please
# increase system_auth keyspace replication factor if you use this authorizer.
authorizer: AllowAllAuthorizer
# Validity period for permissions cache (fetching permissions can be an
# expensive operation depending on the authorizer, CassandraAuthorizer is
# one example). Defaults to 2000, set to 0 to disable.
# Will be disabled automatically for AllowAllAuthorizer.
permissions_validity_in_ms: 2000
# The partitioner is responsible for distributing rows (by key) across
# nodes in the cluster. Any IPartitioner may be used, including your
# own as long as it is on the classpath. Out of the box, Cassandra
# provides org.apache.cassandra.dht.{Murmur3Partitioner, RandomPartitioner
# ByteOrderedPartitioner, OrderPreservingPartitioner (deprecated)}.
#
# - RandomPartitioner distributes rows across the cluster evenly by md5.
# This is the default prior to 1.2 and is retained for compatibility.
# - Murmur3Partitioner is similar to RandomPartioner but uses Murmur3_128
# Hash Function instead of md5. When in doubt, this is the best option.
# - ByteOrderedPartitioner orders rows lexically by key bytes. BOP allows
# scanning rows in key order, but the ordering can generate hot spots
# for sequential insertion workloads.
# - OrderPreservingPartitioner is an obsolete form of BOP, that stores
# - keys in a less-efficient format and only works with keys that are
# UTF8-encoded Strings.
# - CollatingOPP collates according to EN,US rules rather than lexical byte
# ordering. Use this as an example if you need custom collation.
#
# See http://wiki.apache.org/cassandra/Operations for more on
# partitioners and token selection.
partitioner: org.apache.cassandra.dht.Murmur3Partitioner
# Directories where Cassandra should store data on disk. Cassandra
# will spread data evenly across them, subject to the granularity of
# the configured compaction strategy.
data_file_directories:
- target/embeddedCassandra/data
# commit log
commitlog_directory: target/embeddedCassandra/commitlog
# policy for data disk failures:
# stop: shut down gossip and Thrift, leaving the node effectively dead, but
# can still be inspected via JMX.
# best_effort: stop using the failed disk and respond to requests based on
# remaining available sstables. This means you WILL see obsolete
# data at CL.ONE!
# ignore: ignore fatal errors and let requests fail, as in pre-1.2 Cassandra
disk_failure_policy: stop
# Maximum size of the key cache in memory.
#
# Each key cache hit saves 1 seek and each row cache hit saves 2 seeks at the
# minimum, sometimes more. The key cache is fairly tiny for the amount of
# time it saves, so it's worthwhile to use it at large numbers.
# The row cache saves even more time, but must contain the entire row,
# so it is extremely space-intensive. It's best to only use the
# row cache if you have hot rows or static rows.
#
# NOTE: if you reduce the size, you may not get you hottest keys loaded on startup.
#
# Default value is empty to make it "auto" (min(5% of Heap (in MB), 100MB)). Set to 0 to disable key cache.
key_cache_size_in_mb:
# Duration in seconds after which Cassandra should
# save the key cache. Caches are saved to saved_caches_directory as
# specified in this configuration file.
#
# Saved caches greatly improve cold-start speeds, and is relatively cheap in
# terms of I/O for the key cache. Row cache saving is much more expensive and
# has limited use.
#
# Default is 14400 or 4 hours.
key_cache_save_period: 14400
# Number of keys from the key cache to save
# Disabled by default, meaning all keys are going to be saved
# key_cache_keys_to_save: 100
# Maximum size of the row cache in memory.
# NOTE: if you reduce the size, you may not get you hottest keys loaded on startup.
#
# Default value is 0, to disable row caching.
row_cache_size_in_mb: 0
# Duration in seconds after which Cassandra should
# safe the row cache. Caches are saved to saved_caches_directory as specified
# in this configuration file.
#
# Saved caches greatly improve cold-start speeds, and is relatively cheap in
# terms of I/O for the key cache. Row cache saving is much more expensive and
# has limited use.
#
# Default is 0 to disable saving the row cache.
row_cache_save_period: 0
# Number of keys from the row cache to save
# Disabled by default, meaning all keys are going to be saved
# row_cache_keys_to_save: 100
# The off-heap memory allocator. Affects storage engine metadata as
# well as caches. Experiments show that JEMAlloc saves some memory
# than the native GCC allocator (i.e., JEMalloc is more
# fragmentation-resistant).
#
# Supported values are: NativeAllocator, JEMallocAllocator
#
# If you intend to use JEMallocAllocator you have to install JEMalloc as library and
# modify cassandra-env.sh as directed in the file.
#
# Defaults to NativeAllocator
# memory_allocator: NativeAllocator
# saved caches
saved_caches_directory: target/embeddedCassandra/saved_caches
# commitlog_sync may be either "periodic" or "batch."
# When in batch mode, Cassandra won't ack writes until the commit log
# has been fsynced to disk. It will wait up to
# commitlog_sync_batch_window_in_ms milliseconds for other writes, before
# performing the sync.
#
# commitlog_sync: batch
# commitlog_sync_batch_window_in_ms: 50
#
# the other option is "periodic" where writes may be acked immediately
# and the CommitLog is simply synced every commitlog_sync_period_in_ms
# milliseconds. By default this allows 1024*(CPU cores) pending
# entries on the commitlog queue. If you are writing very large blobs,
# you should reduce that; 16*cores works reasonably well for 1MB blobs.
# It should be at least as large as the concurrent_writes setting.
commitlog_sync: periodic
commitlog_sync_period_in_ms: 10000
# commitlog_periodic_queue_size:
# The size of the individual commitlog file segments. A commitlog
# segment may be archived, deleted, or recycled once all the data
# in it (potentially from each columnfamily in the system) has been
# flushed to sstables.
#
# The default size is 32, which is almost always fine, but if you are
# archiving commitlog segments (see commitlog_archiving.properties),
# then you probably want a finer granularity of archiving; 8 or 16 MB
# is reasonable.
commitlog_segment_size_in_mb: 32
# any class that implements the SeedProvider interface and has a
# constructor that takes a Map<String, String> of parameters will do.
seed_provider:
# Addresses of hosts that are deemed contact points.
# Cassandra nodes use this list of hosts to find each other and learn
# the topology of the ring. You must change this if you are running
# multiple nodes!
- class_name: org.apache.cassandra.locator.SimpleSeedProvider
parameters:
# seeds is actually a comma-delimited list of addresses.
# Ex: "<ip1>,<ip2>,<ip3>"
- seeds: "127.0.0.1"
# For workloads with more data than can fit in memory, Cassandra's
# bottleneck will be reads that need to fetch data from
# disk. "concurrent_reads" should be set to (16 * number_of_drives) in
# order to allow the operations to enqueue low enough in the stack
# that the OS and drives can reorder them.
#
# On the other hand, since writes are almost never IO bound, the ideal
# number of "concurrent_writes" is dependent on the number of cores in
# your system; (8 * number_of_cores) is a good rule of thumb.
concurrent_reads: 32
concurrent_writes: 32
# Total memory to use for sstable-reading buffers. Defaults to
# the smaller of 1/4 of heap or 512MB.
# file_cache_size_in_mb: 512
# Total memory to use for memtables. Cassandra will flush the largest
# memtable when this much memory is used.
# If omitted, Cassandra will set it to 1/3 of the heap.
# memtable_total_space_in_mb: 2048
# Total space to use for commitlogs. Since commitlog segments are
# mmapped, and hence use up address space, the default size is 32
# on 32-bit JVMs, and 1024 on 64-bit JVMs.
#
# If space gets above this value (it will round up to the next nearest
# segment multiple), Cassandra will flush every dirty CF in the oldest
# segment and remove it. So a small total commitlog space will tend
# to cause more flush activity on less-active columnfamilies.
# commitlog_total_space_in_mb: 4096
# This sets the amount of memtable flush writer threads. These will
# be blocked by disk io, and each one will hold a memtable in memory
# while blocked. If you have a large heap and many data directories,
# you can increase this value for better flush performance.
# By default this will be set to the amount of data directories defined.
#memtable_flush_writers: 1
# the number of full memtables to allow pending flush, that is,
# waiting for a writer thread. At a minimum, this should be set to
# the maximum number of secondary indexes created on a single CF.
memtable_flush_queue_size: 4
# Whether to, when doing sequential writing, fsync() at intervals in
# order to force the operating system to flush the dirty
# buffers. Enable this to avoid sudden dirty buffer flushing from
# impacting read latencies. Almost always a good idea on SSDs; not
# necessarily on platters.
trickle_fsync: false
trickle_fsync_interval_in_kb: 10240
# TCP port, for commands and data
storage_port: 7500
# SSL port, for encrypted communication. Unused unless enabled in
# encryption_options
ssl_storage_port: 7501
# Address to bind to and tell other Cassandra nodes to connect to. You
# _must_ change this if you want multiple nodes to be able to
# communicate!
#
# Leaving it blank leaves it up to InetAddress.getLocalHost(). This
# will always do the Right Thing _if_ the node is properly configured
# (hostname, name resolution, etc), and the Right Thing is to use the
# address associated with the hostname (it might not be).
#
# Setting this to 0.0.0.0 is always wrong.
listen_address: 127.0.0.1
# Address to broadcast to other Cassandra nodes
# Leaving this blank will set it to the same value as listen_address
# broadcast_address: 1.2.3.4
# Internode authentication backend, implementing IInternodeAuthenticator;
# used to allow/disallow connections from peer nodes.
# internode_authenticator: org.apache.cassandra.auth.AllowAllInternodeAuthenticator
# Whether to start the native transport server.
# Please note that the address on which the native transport is bound is the
# same as the rpc_address. The port however is different and specified below.
start_native_transport: true
# port for the CQL native transport to listen for clients on
native_transport_port: 9542
# The maximum threads for handling requests when the native transport is used.
# This is similar to rpc_max_threads though the default differs slightly (and
# there is no native_transport_min_threads, idle threads will always be stopped
# after 30 seconds).
# native_transport_max_threads: 128
# Whether to start the thrift rpc server.
start_rpc: true
# The address to bind the Thrift RPC service and native transport
# server -- clients connect here.
#
# Leaving this blank has the same effect it does for ListenAddress,
# (i.e. it will be based on the configured hostname of the node).
#
# Note that unlike ListenAddress above, it is allowed to specify 0.0.0.0
# here if you want to listen on all interfaces, but that will break clients
# that rely on node auto-discovery.
rpc_address: localhost
# port for Thrift to listen for clients on
rpc_port: 9560
# enable or disable keepalive on rpc connections
rpc_keepalive: true
# Cassandra provides two out-of-the-box options for the RPC Server:
#
# sync -> One thread per thrift connection. For a very large number of clients, memory
# will be your limiting factor. On a 64 bit JVM, 180KB is the minimum stack size
# per thread, and that will correspond to your use of virtual memory (but physical memory
# may be limited depending on use of stack space).
#
# hsha -> Stands for "half synchronous, half asynchronous." All thrift clients are handled
# asynchronously using a small number of threads that does not vary with the amount
# of thrift clients (and thus scales well to many clients). The rpc requests are still
# synchronous (one thread per active request).
#
# The default is sync because on Windows hsha is about 30% slower. On Linux,
# sync/hsha performance is about the same, with hsha of course using less memory.
#
# Alternatively, can provide your own RPC server by providing the fully-qualified class name
# of an o.a.c.t.TServerFactory that can create an instance of it.
rpc_server_type: hsha
# Uncomment rpc_min|max_thread to set request pool size limits.
#
# Regardless of your choice of RPC server (see above), the number of maximum requests in the
# RPC thread pool dictates how many concurrent requests are possible (but if you are using the sync
# RPC server, it also dictates the number of clients that can be connected at all).
#
# The default is unlimited and thus provides no protection against clients overwhelming the server. You are
# encouraged to set a maximum that makes sense for you in production, but do keep in mind that
# rpc_max_threads represents the maximum number of client requests this server may execute concurrently.
#
# rpc_min_threads: 16
# rpc_max_threads: 2048
# uncomment to set socket buffer sizes on rpc connections
# rpc_send_buff_size_in_bytes:
# rpc_recv_buff_size_in_bytes:
# Uncomment to set socket buffer size for internode communication
# Note that when setting this, the buffer size is limited by net.core.wmem_max
# and when not setting it it is defined by net.ipv4.tcp_wmem
# See:
# /proc/sys/net/core/wmem_max
# /proc/sys/net/core/rmem_max
# /proc/sys/net/ipv4/tcp_wmem
# /proc/sys/net/ipv4/tcp_wmem
# and: man tcp
# internode_send_buff_size_in_bytes:
# internode_recv_buff_size_in_bytes:
# Frame size for thrift (maximum message length).
thrift_framed_transport_size_in_mb: 15
# Set to true to have Cassandra create a hard link to each sstable
# flushed or streamed locally in a backups/ subdirectory of the
# keyspace data. Removing these links is the operator's
# responsibility.
incremental_backups: false
# Whether or not to take a snapshot before each compaction. Be
# careful using this option, since Cassandra won't clean up the
# snapshots for you. Mostly useful if you're paranoid when there
# is a data format change.
snapshot_before_compaction: false
# Whether or not a snapshot is taken of the data before keyspace truncation
# or dropping of column families. The STRONGLY advised default of true
# should be used to provide data safety. If you set this flag to false, you will
# lose data on truncation or drop.
auto_snapshot: true
# When executing a scan, within or across a partition, we need to keep the
# tombstones seen in memory so we can return them to the coordinator, which
# will use them to make sure other replicas also know about the deleted rows.
# With workloads that generate a lot of tombstones, this can cause performance
# problems and even exaust the server heap.
# (http://www.datastax.com/dev/blog/cassandra-anti-patterns-queues-and-queue-like-datasets)
# Adjust the thresholds here if you understand the dangers and want to
# scan more tombstones anyway. These thresholds may also be adjusted at runtime
# using the StorageService mbean.
tombstone_warn_threshold: 1000
tombstone_failure_threshold: 100000
# Add column indexes to a row after its contents reach this size.
# Increase if your column values are large, or if you have a very large
# number of columns. The competing causes are, Cassandra has to
# deserialize this much of the row to read a single column, so you want
# it to be small - at least if you do many partial-row reads - but all
# the index data is read for each access, so you don't want to generate
# that wastefully either.
column_index_size_in_kb: 64
# Size limit for rows being compacted in memory. Larger rows will spill
# over to disk and use a slower two-pass compaction process. A message
# will be logged specifying the row key.
in_memory_compaction_limit_in_mb: 64
# Number of simultaneous compactions to allow, NOT including
# validation "compactions" for anti-entropy repair. Simultaneous
# compactions can help preserve read performance in a mixed read/write
# workload, by mitigating the tendency of small sstables to accumulate
# during a single long running compactions. The default is usually
# fine and if you experience problems with compaction running too
# slowly or too fast, you should look at
# compaction_throughput_mb_per_sec first.
#
# concurrent_compactors defaults to the number of cores.
# Uncomment to make compaction mono-threaded, the pre-0.8 default.
#concurrent_compactors: 1
# Multi-threaded compaction. When enabled, each compaction will use
# up to one thread per core, plus one thread per sstable being merged.
# This is usually only useful for SSD-based hardware: otherwise,
# your concern is usually to get compaction to do LESS i/o (see:
# compaction_throughput_mb_per_sec), not more.
multithreaded_compaction: false
# Throttles compaction to the given total throughput across the entire
# system. The faster you insert data, the faster you need to compact in
# order to keep the sstable count down, but in general, setting this to
# 16 to 32 times the rate you are inserting data is more than sufficient.
# Setting this to 0 disables throttling. Note that this account for all types
# of compaction, including validation compaction.
compaction_throughput_mb_per_sec: 16
# Track cached row keys during compaction, and re-cache their new
# positions in the compacted sstable. Disable if you use really large
# key caches.
compaction_preheat_key_cache: true
# Throttles all outbound streaming file transfers on this node to the
# given total throughput in Mbps. This is necessary because Cassandra does
# mostly sequential IO when streaming data during bootstrap or repair, which
# can lead to saturating the network connection and degrading rpc performance.
# When unset, the default is 200 Mbps or 25 MB/s.
# stream_throughput_outbound_megabits_per_sec: 200
# How long the coordinator should wait for read operations to complete
read_request_timeout_in_ms: 5000
# How long the coordinator should wait for seq or index scans to complete
range_request_timeout_in_ms: 10000
# How long the coordinator should wait for writes to complete
write_request_timeout_in_ms: 2000
# How long a coordinator should continue to retry a CAS operation
# that contends with other proposals for the same row
cas_contention_timeout_in_ms: 1000
# How long the coordinator should wait for truncates to complete
# (This can be much longer, because unless auto_snapshot is disabled
# we need to flush first so we can snapshot before removing the data.)
truncate_request_timeout_in_ms: 60000
# The default timeout for other, miscellaneous operations
request_timeout_in_ms: 10000
# Enable operation timeout information exchange between nodes to accurately
# measure request timeouts. If disabled, replicas will assume that requests
# were forwarded to them instantly by the coordinator, which means that
# under overload conditions we will waste that much extra time processing
# already-timed-out requests.
#
# Warning: before enabling this property make sure to ntp is installed
# and the times are synchronized between the nodes.
cross_node_timeout: false
# Enable socket timeout for streaming operation.
# When a timeout occurs during streaming, streaming is retried from the start
# of the current file. This _can_ involve re-streaming an important amount of
# data, so you should avoid setting the value too low.
# Default value is 0, which never timeout streams.
# streaming_socket_timeout_in_ms: 0
# phi value that must be reached for a host to be marked down.
# most users should never need to adjust this.
# phi_convict_threshold: 8
# endpoint_snitch -- Set this to a class that implements
# IEndpointSnitch. The snitch has two functions:
# - it teaches Cassandra enough about your network topology to route
# requests efficiently
# - it allows Cassandra to spread replicas around your cluster to avoid
# correlated failures. It does this by grouping machines into
# "datacenters" and "racks." Cassandra will do its best not to have
# more than one replica on the same "rack" (which may not actually
# be a physical location)
#
# IF YOU CHANGE THE SNITCH AFTER DATA IS INSERTED INTO THE CLUSTER,
# YOU MUST RUN A FULL REPAIR, SINCE THE SNITCH AFFECTS WHERE REPLICAS
# ARE PLACED.
#
# Out of the box, Cassandra provides
# - SimpleSnitch:
# Treats Strategy order as proximity. This improves cache locality
# when disabling read repair, which can further improve throughput.
# Only appropriate for single-datacenter deployments.
# - PropertyFileSnitch:
# Proximity is determined by rack and data center, which are
# explicitly configured in cassandra-topology.properties.
# - GossipingPropertyFileSnitch
# The rack and datacenter for the local node are defined in
# cassandra-rackdc.properties and propagated to other nodes via gossip. If
# cassandra-topology.properties exists, it is used as a fallback, allowing
# migration from the PropertyFileSnitch.
# - RackInferringSnitch:
# Proximity is determined by rack and data center, which are
# assumed to correspond to the 3rd and 2nd octet of each node's
# IP address, respectively. Unless this happens to match your
# deployment conventions (as it did Facebook's), this is best used
# as an example of writing a custom Snitch class.
# - Ec2Snitch:
# Appropriate for EC2 deployments in a single Region. Loads Region
# and Availability Zone information from the EC2 API. The Region is
# treated as the datacenter, and the Availability Zone as the rack.
# Only private IPs are used, so this will not work across multiple
# Regions.
# - Ec2MultiRegionSnitch:
# Uses public IPs as broadcast_address to allow cross-region
# connectivity. (Thus, you should set seed addresses to the public
# IP as well.) You will need to open the storage_port or
# ssl_storage_port on the public IP firewall. (For intra-Region
# traffic, Cassandra will switch to the private IP after
# establishing a connection.)
#
# You can use a custom Snitch by setting this to the full class name
# of the snitch, which will be assumed to be on your classpath.
endpoint_snitch: SimpleSnitch
# controls how often to perform the more expensive part of host score
# calculation
dynamic_snitch_update_interval_in_ms: 100
# controls how often to reset all host scores, allowing a bad host to
# possibly recover
dynamic_snitch_reset_interval_in_ms: 600000
# if set greater than zero and read_repair_chance is < 1.0, this will allow
# 'pinning' of replicas to hosts in order to increase cache capacity.
# The badness threshold will control how much worse the pinned host has to be
# before the dynamic snitch will prefer other replicas over it. This is
# expressed as a double which represents a percentage. Thus, a value of
# 0.2 means Cassandra would continue to prefer the static snitch values
# until the pinned host was 20% worse than the fastest.
dynamic_snitch_badness_threshold: 0.1
# request_scheduler -- Set this to a class that implements
# RequestScheduler, which will schedule incoming client requests
# according to the specific policy. This is useful for multi-tenancy
# with a single Cassandra cluster.
# NOTE: This is specifically for requests from the client and does
# not affect inter node communication.
# org.apache.cassandra.scheduler.NoScheduler - No scheduling takes place
# org.apache.cassandra.scheduler.RoundRobinScheduler - Round robin of
# client requests to a node with a separate queue for each
# request_scheduler_id. The scheduler is further customized by
# request_scheduler_options as described below.
request_scheduler: org.apache.cassandra.scheduler.NoScheduler
# Scheduler Options vary based on the type of scheduler
# NoScheduler - Has no options
# RoundRobin
# - throttle_limit -- The throttle_limit is the number of in-flight
# requests per client. Requests beyond
# that limit are queued up until
# running requests can complete.
# The value of 80 here is twice the number of
# concurrent_reads + concurrent_writes.
# - default_weight -- default_weight is optional and allows for
# overriding the default which is 1.
# - weights -- Weights are optional and will default to 1 or the
# overridden default_weight. The weight translates into how
# many requests are handled during each turn of the
# RoundRobin, based on the scheduler id.
#
# request_scheduler_options:
# throttle_limit: 80
# default_weight: 5
# weights:
# Keyspace1: 1
# Keyspace2: 5
# request_scheduler_id -- An identifier based on which to perform
# the request scheduling. Currently the only valid option is keyspace.
# request_scheduler_id: keyspace
# Enable or disable inter-node encryption
# Default settings are TLS v1, RSA 1024-bit keys (it is imperative that
# users generate their own keys) TLS_RSA_WITH_AES_128_CBC_SHA as the cipher
# suite for authentication, key exchange and encryption of the actual data transfers.
# NOTE: No custom encryption options are enabled at the moment
# The available internode options are : all, none, dc, rack
#
# If set to dc cassandra will encrypt the traffic between the DCs
# If set to rack cassandra will encrypt the traffic between the racks
#
# The passwords used in these options must match the passwords used when generating
# the keystore and truststore. For instructions on generating these files, see:
# http://download.oracle.com/javase/6/docs/technotes/guides/security/jsse/JSSERefGuide.html#CreateKeystore
#
server_encryption_options:
internode_encryption: none
keystore: conf/.keystore
keystore_password: cassandra
truststore: conf/.truststore
truststore_password: cassandra
# More advanced defaults below:
# protocol: TLS
# algorithm: SunX509
# store_type: JKS
# cipher_suites: [TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA]
# require_client_auth: false
# enable or disable client/server encryption.
client_encryption_options:
enabled: false
keystore: conf/.keystore
keystore_password: cassandra
# require_client_auth: false
# Set trustore and truststore_password if require_client_auth is true
# truststore: conf/.truststore
# truststore_password: cassandra
# More advanced defaults below:
# protocol: TLS
# algorithm: SunX509
# store_type: JKS
# cipher_suites: [TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA]
# internode_compression controls whether traffic between nodes is
# compressed.
# can be: all - all traffic is compressed
# dc - traffic between different datacenters is compressed
# none - nothing is compressed.
internode_compression: all
# Enable or disable tcp_nodelay for inter-dc communication.
# Disabling it will result in larger (but fewer) network packets being sent,
# reducing overhead from the TCP protocol itself, at the cost of increasing
# latency if you block for cross-datacenter responses.
inter_dc_tcp_nodelay: false
# Enable or disable kernel page cache preheating from contents of the key cache after compaction.
# When enabled it would preheat only first "page" (4KB) of each row to optimize
# for sequential access. Note: This could be harmful for fat rows, see CASSANDRA-4937
# for further details on that topic.
preheat_kernel_page_cache: false
SimpleClient.java
package pl.allegro.cassy.datastax;
import com.datastax.driver.core.Cluster;
import com.datastax.driver.core.Host;
import com.datastax.driver.core.Metadata;
import com.datastax.driver.core.Session;
import pl.allegro.cassy.Client;
public class SimpleClient implements Client {
private Cluster cluster;
private Session session;
@Override
public Session connect(String cassandraHost, int cassandraPort, String keyspaceName) {
cluster = Cluster.builder()
.withPort(cassandraPort)
.addContactPoint(cassandraHost)
.build();
session = cluster.connect(keyspaceName);
printMetaData();
return session;
}
@Override
public void disconnect() {
if (this.cluster != null) {
this.cluster.shutdown();
this.cluster = null;
}
}
@Override
public Cluster getConnection() {
return this.cluster;
}
private void printMetaData() {
Metadata metadata = cluster.getMetadata();
System.out.printf("Connected to cluster %s\n", metadata.getClusterName());
// iterate all hosts in the cluster
for (Host host : metadata.getAllHosts()) {
System.out.printf("Datacenter: %s; Host: %s; Rack: %s\n", host.getDatacenter(),
host.getAddress(),
host.getRack()
);
}
}
}
Client.java
package pl.allegro.cassy;
import com.datastax.driver.core.Cluster;
import com.datastax.driver.core.Session;
public interface Client {
public Session connect(String cassandraHost, int cassandraPort, String keyspaceName);
public void disconnect();
public Cluster getConnection();
}
import org.cassandraunit.utils.EmbeddedCassandraServerHelper;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;
import pl.allegro.cassy.Client;
import pl.allegro.cassy.datastax.SimpleClient;
import com.datastax.driver.core.Session;
public class T {
@BeforeClass
public static void setup() throws Exception {
EmbeddedCassandraServerHelper.startEmbeddedCassandra("cassandra.yaml");
// issue!
//CQLDataLoader loader = new CQLDataLoader("127.0.0.1", 9560);
// loader.load(new ClassPathCQLDataSet("data.cql"));
}
@Test
public void connect() {
System.out.println("-- connect");
Session session = null;
Client client = new SimpleClient();
session = client.connect("127.0.0.1", 9542, "system");
Assert.assertNotNull(session);
System.out.println(" session name : " + session.getCluster().getClusterName());
System.out.println(" session connect timeout: " + session.getCluster().getConfiguration().getSocketOptions().getConnectTimeoutMillis());
}
@Test
public void disconnect() {
System.out.println("-- disconnect ");
Client client = new SimpleClient();
client.connect("127.0.0.1", 9542, "system");
client.disconnect();
}
}
테스트 결과는 다음과 같다. junit 테스트는 모두 작동 완료했다.
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/Users/knight/.m2/repository/org/slf4j/slf4j-simple/1.7.5/slf4j-simple-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/Users/knight/.m2/repository/org/slf4j/slf4j-log4j12/1.6.1/slf4j-log4j12-1.6.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.SimpleLoggerFactory]
[main] INFO org.apache.cassandra.config.YamlConfigurationLoader - Loading settings from file:/Users/knight/git/cassyunit-2.0-test/target/embeddedCassandra/cassandra.yaml
[main] INFO org.apache.cassandra.config.DatabaseDescriptor - Data files directories: [target/embeddedCassandra/data]
[main] INFO org.apache.cassandra.config.DatabaseDescriptor - Commit log directory: target/embeddedCassandra/commitlog
[main] INFO org.apache.cassandra.config.DatabaseDescriptor - DiskAccessMode 'auto' determined to be mmap, indexAccessMode is mmap
[main] INFO org.apache.cassandra.config.DatabaseDescriptor - disk_failure_policy is stop
[main] INFO org.apache.cassandra.config.DatabaseDescriptor - Global memtable threshold is enabled at 219MB
[main] INFO org.apache.cassandra.config.DatabaseDescriptor - Not using multi-threaded compaction
[pool-1-thread-1] INFO org.apache.cassandra.service.CassandraDaemon - JVM vendor/version: Java HotSpot(TM) 64-Bit Server VM/1.7.0_11
[pool-1-thread-1] INFO org.apache.cassandra.service.CassandraDaemon - Heap size: 61997056/920911872
[pool-1-thread-1] INFO org.apache.cassandra.service.CassandraDaemon - Classpath: /Users/knight/git/cassyunit-2.0-test/target/test-classes:/Users/knight/git/cassyunit-2.0-test/target/classes:/Users/knight/.m2/repository/javax/validation/validation-api/1.0.0.GA/validation-api-1.0.0.GA.jar:/Users/knight/.m2/repository/javax/xml/bind/jaxb-api/2.2.3/jaxb-api-2.2.3.jar:/Users/knight/.m2/repository/javax/xml/stream/stax-api/1.0-2/stax-api-1.0-2.jar:/Users/knight/.m2/repository/javax/activation/activation/1.1/activation-1.1.jar:/Users/knight/.m2/repository/org/slf4j/slf4j-simple/1.7.5/slf4j-simple-1.7.5.jar:/Users/knight/.m2/repository/org/slf4j/slf4j-api/1.7.5/slf4j-api-1.7.5.jar:/Users/knight/.m2/repository/org/cassandraunit/cassandra-unit/2.0.2.0-SNAPSHOT/cassandra-unit-2.0.2.0-SNAPSHOT.jar:/Users/knight/.m2/repository/com/datastax/cassandra/cassandra-driver-core/2.0.0-rc1/cassandra-driver-core-2.0.0-rc1.jar:/Users/knight/.m2/repository/io/netty/netty/3.7.0.Final/netty-3.7.0.Final.jar:/Users/knight/.m2/repository/com/google/guava/guava/15.0/guava-15.0.jar:/Users/knight/.m2/repository/org/codehaus/jackson/jackson-mapper-asl/1.9.13/jackson-mapper-asl-1.9.13.jar:/Users/knight/.m2/repository/com/codahale/metrics/metrics-core/3.0.1/metrics-core-3.0.1.jar:/Users/knight/.m2/repository/junit/junit/4.11/junit-4.11.jar:/Users/knight/.m2/repository/org/hamcrest/hamcrest-all/1.1/hamcrest-all-1.1.jar:/Users/knight/.m2/repository/org/apache/cassandra/cassandra-all/2.0.2/cassandra-all-2.0.2.jar:/Users/knight/.m2/repository/org/xerial/snappy/snappy-java/1.0.5/snappy-java-1.0.5.jar:/Users/knight/.m2/repository/net/jpountz/lz4/lz4/1.2.0/lz4-1.2.0.jar:/Users/knight/.m2/repository/com/ning/compress-lzf/0.8.4/compress-lzf-0.8.4.jar:/Users/knight/.m2/repository/commons-cli/commons-cli/1.2/commons-cli-1.2.jar:/Users/knight/.m2/repository/commons-codec/commons-codec/1.2/commons-codec-1.2.jar:/Users/knight/.m2/repository/org/apache/commons/commons-lang3/3.1/commons-lang3-3.1.jar:/Users/knight/.m2/repository/com/googlecode/concurrentlinkedhashmap/concurrentlinkedhashmap-lru/1.3/concurrentlinkedhashmap-lru-1.3.jar:/Users/knight/.m2/repository/org/antlr/antlr/3.2/antlr-3.2.jar:/Users/knight/.m2/repository/org/antlr/antlr-runtime/3.2/antlr-runtime-3.2.jar:/Users/knight/.m2/repository/org/antlr/stringtemplate/3.2/stringtemplate-3.2.jar:/Users/knight/.m2/repository/antlr/antlr/2.7.7/antlr-2.7.7.jar:/Users/knight/.m2/repository/org/codehaus/jackson/jackson-core-asl/1.9.2/jackson-core-asl-1.9.2.jar:/Users/knight/.m2/repository/jline/jline/1.0/jline-1.0.jar:/Users/knight/.m2/repository/com/googlecode/json-simple/json-simple/1.1/json-simple-1.1.jar:/Users/knight/.m2/repository/com/github/stephenc/high-scale-lib/high-scale-lib/1.1.2/high-scale-lib-1.1.2.jar:/Users/knight/.m2/repository/org/yaml/snakeyaml/1.13/snakeyaml-1.13.jar:/Users/knight/.m2/repository/edu/stanford/ppl/snaptree/0.1/snaptree-0.1.jar:/Users/knight/.m2/repository/org/mindrot/jbcrypt/0.3m/jbcrypt-0.3m.jar:/Users/knight/.m2/repository/com/yammer/metrics/metrics-core/2.2.0/metrics-core-2.2.0.jar:/Users/knight/.m2/repository/com/addthis/metrics/reporter-config/2.1.0/reporter-config-2.1.0.jar:/Users/knight/.m2/repository/org/hibernate/hibernate-validator/4.3.0.Final/hibernate-validator-4.3.0.Final.jar:/Users/knight/.m2/repository/org/jboss/logging/jboss-logging/3.1.0.CR2/jboss-logging-3.1.0.CR2.jar:/Users/knight/.m2/repository/com/thinkaurelius/thrift/thrift-server/0.3.2/thrift-server-0.3.2.jar:/Users/knight/.m2/repository/com/lmax/disruptor/3.0.1/disruptor-3.0.1.jar:/Users/knight/.m2/repository/org/apache/thrift/libthrift/0.9.1/libthrift-0.9.1.jar:/Users/knight/.m2/repository/org/apache/httpcomponents/httpclient/4.2.5/httpclient-4.2.5.jar:/Users/knight/.m2/repository/org/apache/httpcomponents/httpcore/4.2.4/httpcore-4.2.4.jar:/Users/knight/.m2/repository/org/apache/cassandra/cassandra-thrift/2.0.2/cassandra-thrift-2.0.2.jar:/Users/knight/.m2/repository/com/github/stephenc/jamm/0.2.5/jamm-0.2.5.jar:/Users/knight/.m2/repository/org/jboss/netty/netty/3.2.9.Final/netty-3.2.9.Final.jar:/Users/knight/.m2/repository/org/slf4j/slf4j-log4j12/1.6.1/slf4j-log4j12-1.6.1.jar:/Users/knight/.m2/repository/log4j/log4j/1.2.16/log4j-1.2.16.jar:/Users/knight/.m2/repository/com/sun/xml/bind/jaxb-impl/2.2.4-1/jaxb-impl-2.2.4-1.jar:/Users/knight/.m2/repository/org/hectorclient/hector-core/1.1-4/hector-core-1.1-4.jar:/Users/knight/.m2/repository/commons-lang/commons-lang/2.6/commons-lang-2.6.jar:/Users/knight/.m2/repository/commons-pool/commons-pool/1.5.3/commons-pool-1.5.3.jar:/Users/knight/.m2/repository/com/github/stephenc/eaio-uuid/uuid/3.2.0/uuid-3.2.0.jar:/Users/knight/.m2/repository/com/ecyrd/speed4j/speed4j/0.9/speed4j-0.9.jar:/Users/knight/.m2/repository/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar:/Users/knight/springsource/sts-3.4.0.RELEASE/configuration/org.eclipse.osgi/bundles/402/1/.cp/:/Users/knight/springsource/sts-3.4.0.RELEASE/configuration/org.eclipse.osgi/bundles/401/1/.cp/
[pool-1-thread-1] INFO org.apache.cassandra.utils.CLibrary - JNA not found. Native methods will be disabled.
[pool-1-thread-1] INFO org.apache.cassandra.service.CacheService - Initializing key cache with capacity of 2 MBs.
[pool-1-thread-1] INFO org.apache.cassandra.service.CacheService - Scheduling key cache save to each 14400 seconds (going to save all keys).
[pool-1-thread-1] INFO org.apache.cassandra.service.CacheService - Initializing row cache with capacity of 0 MBs
[pool-1-thread-1] INFO org.apache.cassandra.service.CacheService - Scheduling row cache save to each 0 seconds (going to save all keys).
[pool-1-thread-1] INFO org.apache.cassandra.db.ColumnFamilyStore - Initializing system.schema_triggers
[pool-1-thread-1] INFO org.apache.cassandra.db.ColumnFamilyStore - Initializing system.compaction_history
[pool-1-thread-1] INFO org.apache.cassandra.db.ColumnFamilyStore - Initializing system.batchlog
[pool-1-thread-1] INFO org.apache.cassandra.db.ColumnFamilyStore - Initializing system.sstable_activity
[pool-1-thread-1] INFO org.apache.cassandra.db.ColumnFamilyStore - Initializing system.peer_events
[pool-1-thread-1] INFO org.apache.cassandra.db.ColumnFamilyStore - Initializing system.compactions_in_progress
[pool-1-thread-1] INFO org.apache.cassandra.db.ColumnFamilyStore - Initializing system.hints
[pool-1-thread-1] INFO org.apache.cassandra.db.ColumnFamilyStore - Initializing system.schema_keyspaces
[pool-1-thread-1] INFO org.apache.cassandra.db.ColumnFamilyStore - Initializing system.range_xfers
[pool-1-thread-1] INFO org.apache.cassandra.db.ColumnFamilyStore - Initializing system.schema_columnfamilies
[pool-1-thread-1] INFO org.apache.cassandra.db.ColumnFamilyStore - Initializing system.NodeIdInfo
[pool-1-thread-1] INFO org.apache.cassandra.db.ColumnFamilyStore - Initializing system.paxos
[pool-1-thread-1] INFO org.apache.cassandra.db.ColumnFamilyStore - Initializing system.schema_columns
[pool-1-thread-1] INFO org.apache.cassandra.db.ColumnFamilyStore - Initializing system.IndexInfo
[pool-1-thread-1] INFO org.apache.cassandra.db.ColumnFamilyStore - Initializing system.peers
[pool-1-thread-1] INFO org.apache.cassandra.db.ColumnFamilyStore - Initializing system.local
[pool-1-thread-1] INFO org.apache.cassandra.config.DatabaseDescriptor - Couldn't detect any schema definitions in local storage.
[pool-1-thread-1] INFO org.apache.cassandra.config.DatabaseDescriptor - To create keyspaces and column families, see 'help create' in cqlsh.
[pool-1-thread-1] INFO org.apache.cassandra.db.ColumnFamilyStore - Enqueuing flush of Memtable-local@1745669410(144/1440 serialized/live bytes, 6 ops)
[FlushWriter:1] INFO org.apache.cassandra.db.Memtable - Writing Memtable-local@1745669410(144/1440 serialized/live bytes, 6 ops)
[FlushWriter:1] INFO org.apache.cassandra.db.Memtable - Completed flushing target/embeddedCassandra/data/system/local/system-local-jb-1-Data.db (174 bytes) for commitlog position ReplayPosition(segmentId=1384769522823, position=412)
[pool-1-thread-1] INFO org.apache.cassandra.db.commitlog.CommitLog - Replaying target/embeddedCassandra/commitlog/CommitLog-3-1384769522822.log
[pool-1-thread-1] INFO org.apache.cassandra.db.commitlog.CommitLogReplayer - Replaying target/embeddedCassandra/commitlog/CommitLog-3-1384769522822.log
[pool-1-thread-1] INFO org.apache.cassandra.db.commitlog.CommitLogReplayer - Finished reading target/embeddedCassandra/commitlog/CommitLog-3-1384769522822.log
[pool-1-thread-1] INFO org.apache.cassandra.db.commitlog.CommitLog - Log replay complete, 0 replayed mutations
[pool-1-thread-1] INFO org.apache.cassandra.service.StorageService - Cassandra version: 2.0.2
[pool-1-thread-1] INFO org.apache.cassandra.service.StorageService - Thrift API version: 19.38.0
[pool-1-thread-1] INFO org.apache.cassandra.service.StorageService - CQL supported versions: 2.0.0,3.1.1 (default: 3.1.1)
[pool-1-thread-1] INFO org.apache.cassandra.service.StorageService - Loading persisted ring state
[pool-1-thread-1] WARN org.apache.cassandra.db.SystemKeyspace - No host ID found, created 8bdf9e5f-3493-4b52-83ff-4b0b12554c1c (Note: This should happen exactly once per node).
[pool-1-thread-1] INFO org.apache.cassandra.service.StorageService - Starting up server gossip
[pool-1-thread-1] INFO org.apache.cassandra.db.ColumnFamilyStore - Enqueuing flush of Memtable-local@1612558095(320/3200 serialized/live bytes, 12 ops)
[FlushWriter:1] INFO org.apache.cassandra.db.Memtable - Writing Memtable-local@1612558095(320/3200 serialized/live bytes, 12 ops)
[FlushWriter:1] INFO org.apache.cassandra.db.Memtable - Completed flushing target/embeddedCassandra/data/system/local/system-local-jb-2-Data.db (301 bytes) for commitlog position ReplayPosition(segmentId=1384769522823, position=82225)
[pool-1-thread-1] INFO org.apache.cassandra.net.MessagingService - Starting Messaging Service on port 7500
[pool-1-thread-1] INFO org.apache.cassandra.service.StorageService - Generated random tokens. tokens are [-7897495258110946089, -993618140451193622, -741769360282693962, -7365786459655180195, -6996710276778530694, -1805677852708217721, 1173945514353441977, 5838205476682460320, 4281992790760632189, 2419231774471446648, -1166694029847650386, 7262343478793891428, 2423383570357751226, 2116311952626479630, 2155358960048433342, -1834274706856210316, 2687645334969923521, -4638162304885887759, -8091952146158016939, -771155582672544265, 6508501330104885054, -90021061479948672, -970802962310490309, 3658320502290076717, -9016857001732700721, 5850596101715799811, -5816647359882856006, 9024293304198565969, 6392520850732929306, 559089783979280006, 8099155292590458437, -6271948727393445324, 7385052247510557871, -6204171235250648610, -5242026646477551348, 524232974521637404, -2750762283863900828, 2673970317916605471, -3517618708956987990, -2559651028284195467, -5365623817531883925, 1896887247352164763, -254922145894196814, 7148505448955709054, 5455783798975863066, -7905743912886185926, -6913990237302467512, -3900083263238480014, -300191716008264302, 5993436098806299193, -1375986188848960027, -7601519015111664207, -2664437913274766533, 5893592981009676813, 293043419218964469, 8659122455041574771, -141736725893861802, -197100985567820575, 6494910323686262055, 1369222166653577587, -901613166521293950, 7735113709881832752, -5488043932175239119, -6104445712563488485, 1325804735841036092, 2768039918136391990, 3007262876838902265, 9169852366190971443, -8223834675697609811, 828238590501297958, 5017023631689620585, -8868822128780155513, -2444048423001132195, -9163742028306194768, 565900915313702358, -3703350178808181121, -8773976004206028814, 3052852523418293888, -2022179219475515661, 9188732132359748067, 1737820293356112590, 3765918105761241412, 519833407594445560, 5146368331470882714, 2831562007524108108, 5463943589420270988, -5688775091959849715, -1281699718016081471, 6455227726713184128, -1996506638604254698, 704624523657793214, -3037612302558591207, 5024072307681718667, -7266673853770330853, 4242471679611020159, 4956638230402718818, -2362773410941766983, -3981993887863635605, 1557999930878030676, 2463910867318332315, 5369587287570977748, 2469291184722093792, 5916806701316154023, 7558765883469563887, -5422506410380679618, -4225476447154517484, -2650458316641898633, 8511690844999204614, 6536068411116972446, 5546376054407093839, -8946544327604168816, 2748162759792467365, 5368324584492585790, -6031932692066687628, -3667730604010674766, 1153775044181340284, 5092676636153396688, 3021524714754838582, 5321345290946985538, -5983799511060445032, 8958938536391748596, 2312186152666380265, -2241142629934566023, 424702417853746392, -831516986220828184, -8877486524979488104, -7081990162539352833, 885940789545590172, 7313791096238456419, -7471092678943978078, -4486569438179523191, -3392848442139904779, -232380745752110954, 3670571989087625663, 1371267986474029102, 8050466031038065584, -2669056432623234320, 7047995051947828540, -1127278145044095210, -5084991884110266512, -6985701253681661559, 5086749927138490856, -7655670214200876893, -2178591702579170601, -998279180117886112, 5715122411890225087, -5621665586658079456, 7024553038400483474, 1649431723222167031, -1576062719392646313, 3740794267997377733, 6016125052250013341, 1421740322127805419, 2925758069764057582, -8099554026529040208, -240621446974348012, 43108829771781180, 1155045055138286872, 2558277703144832410, -3955485961286090200, 9151457387027004416, -8514643314886697782, 2690655293592479872, -8589755388701167407, -3986294404020955080, -4428326991833971904, -5179706026140210367, 4163440319054215180, -6964157234782005438, 5985303829708487918, 2910359288798234326, 4310369204703870467, -7170991954851418171, 3905555449347845182, -6535039815683472112, 7227536772511147725, -3596078704480759994, 7955947048754694122, -2201544570292534796, 6327035662361745398, 2119232967185821477, -4312204980467488616, -948307019540001527, 95973398253982969, -3818691759247143921, -2878589428638084863, -6432678153824136629, -7848450127604349949, -7930991838782710923, 8148241022209731614, -8221357459178038818, 2381281788685989489, -4926863107303466703, 8557362949934966113, 4456199168021863081, -1300148220769384831, -1292792255664381526, 7175676531965857695, 6234476973744963615, 5192510229338295509, 2544496751577163319, 963098149512324057, -2809805077844872419, 1429179268284480463, -3314419216276692839, 8059672370583251981, -8930169656969335624, -8593378848393845099, 3257187957561045798, -6434129975042123952, 7380410784313701833, -7978996550271630411, 7674946001097203094, 3885927966587556534, -8827632249055872288, 5976660820898290023, 7933850666550013612, 1509934050780416155, 4695538661043795074, 6259369823698750307, -6083411833191744858, 5344161221116991513, -3200529027137048960, 8549409082522883515, -2899435703831967011, -4941569445391403078, 4167261943141531355, 2261894256113385002, -4702756518974544549, 428149618493437793, -6715557104799451720, -7118311070443632199, 4090852646575516292, 2219249805620514712, 5919947735376317944, -8468587022004416840, -1130797596200210995, 693066955998225080, -4882854129587709381, 5587243421286460433, -7803542878084798028, -8406503715768141379, -4568930399575760023, 8480910328410055651, 3775431410073062474, 6197839568383366976, -4689368830782225873, -4843051495780306207, 7408360421939436522, 2949916053542854722, 4656781539546967727, 2064909635358889288, 6930938933995468822, 4857184730863785088, 6373094938167720835, 9157351208706347855]
[pool-1-thread-1] INFO org.apache.cassandra.service.MigrationManager - Create new Keyspace: system_traces, rep strategy:SimpleStrategy{org.apache.cassandra.config.CFMetaData@16d63f65[cfId=c5e99f16-8677-3914-b17e-960613512345,ksName=system_traces,cfName=sessions,cfType=Standard,comparator=org.apache.cassandra.db.marshal.CompositeType(org.apache.cassandra.db.marshal.UTF8Type,org.apache.cassandra.db.marshal.ColumnToCollectionType(706172616d6574657273:org.apache.cassandra.db.marshal.MapType(org.apache.cassandra.db.marshal.UTF8Type,org.apache.cassandra.db.marshal.UTF8Type))),comment=traced sessions,readRepairChance=0.0,dclocalReadRepairChance=0.0,replicateOnWrite=true,gcGraceSeconds=0,defaultValidator=org.apache.cassandra.db.marshal.BytesType,keyValidator=org.apache.cassandra.db.marshal.UUIDType,minCompactionThreshold=4,maxCompactionThreshold=32,column_metadata={java.nio.HeapByteBuffer[pos=0 lim=10 cap=10]=ColumnDefinition{name=73657373696f6e5f6964, validator=org.apache.cassandra.db.marshal.UUIDType, type=PARTITION_KEY, componentIndex=null, indexName=null, indexType=null}, java.nio.HeapByteBuffer[pos=0 lim=8 cap=8]=ColumnDefinition{name=6475726174696f6e, validator=org.apache.cassandra.db.marshal.Int32Type, type=REGULAR, componentIndex=0, indexName=null, indexType=null}, java.nio.HeapByteBuffer[pos=0 lim=10 cap=10]=ColumnDefinition{name=706172616d6574657273, validator=org.apache.cassandra.db.marshal.MapType(org.apache.cassandra.db.marshal.UTF8Type,org.apache.cassandra.db.marshal.UTF8Type), type=REGULAR, componentIndex=0, indexName=null, indexType=null}, java.nio.HeapByteBuffer[pos=0 lim=10 cap=10]=ColumnDefinition{name=737461727465645f6174, validator=org.apache.cassandra.db.marshal.TimestampType, type=REGULAR, componentIndex=0, indexName=null, indexType=null}, java.nio.HeapByteBuffer[pos=0 lim=7 cap=7]=ColumnDefinition{name=72657175657374, validator=org.apache.cassandra.db.marshal.UTF8Type, type=REGULAR, componentIndex=0, indexName=null, indexType=null}, java.nio.HeapByteBuffer[pos=0 lim=11 cap=11]=ColumnDefinition{name=636f6f7264696e61746f72, validator=org.apache.cassandra.db.marshal.InetAddressType, type=REGULAR, componentIndex=0, indexName=null, indexType=null}},compactionStrategyClass=class org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy,compactionStrategyOptions={},compressionOptions={sstable_compression=org.apache.cassandra.io.compress.LZ4Compressor},bloomFilterFpChance=0.01,memtable_flush_period_in_ms=0,caching=KEYS_ONLY,defaultTimeToLive=0,speculative_retry=99.0PERCENTILE,indexInterval=128,populateIoCacheOnFlush=false,droppedColumns={},triggers={}], org.apache.cassandra.config.CFMetaData@3d80023a[cfId=8826e8e9-e16a-3728-8753-3bc1fc713c25,ksName=system_traces,cfName=events,cfType=Standard,comparator=org.apache.cassandra.db.marshal.CompositeType(org.apache.cassandra.db.marshal.TimeUUIDType,org.apache.cassandra.db.marshal.UTF8Type),comment=,readRepairChance=0.0,dclocalReadRepairChance=0.0,replicateOnWrite=true,gcGraceSeconds=0,defaultValidator=org.apache.cassandra.db.marshal.BytesType,keyValidator=org.apache.cassandra.db.marshal.UUIDType,minCompactionThreshold=4,maxCompactionThreshold=32,column_metadata={java.nio.HeapByteBuffer[pos=0 lim=10 cap=10]=ColumnDefinition{name=73657373696f6e5f6964, validator=org.apache.cassandra.db.marshal.UUIDType, type=PARTITION_KEY, componentIndex=null, indexName=null, indexType=null}, java.nio.HeapByteBuffer[pos=0 lim=6 cap=6]=ColumnDefinition{name=736f75726365, validator=org.apache.cassandra.db.marshal.InetAddressType, type=REGULAR, componentIndex=1, indexName=null, indexType=null}, java.nio.HeapByteBuffer[pos=0 lim=6 cap=6]=ColumnDefinition{name=746872656164, validator=org.apache.cassandra.db.marshal.UTF8Type, type=REGULAR, componentIndex=1, indexName=null, indexType=null}, java.nio.HeapByteBuffer[pos=0 lim=8 cap=8]=ColumnDefinition{name=6163746976697479, validator=org.apache.cassandra.db.marshal.UTF8Type, type=REGULAR, componentIndex=1, indexName=null, indexType=null}, java.nio.HeapByteBuffer[pos=0 lim=14 cap=14]=ColumnDefinition{name=736f757263655f656c6170736564, validator=org.apache.cassandra.db.marshal.Int32Type, type=REGULAR, componentIndex=1, indexName=null, indexType=null}, java.nio.HeapByteBuffer[pos=0 lim=8 cap=8]=ColumnDefinition{name=6576656e745f6964, validator=org.apache.cassandra.db.marshal.TimeUUIDType, type=CLUSTERING_KEY, componentIndex=0, indexName=null, indexType=null}},compactionStrategyClass=class org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy,compactionStrategyOptions={},compressionOptions={sstable_compression=org.apache.cassandra.io.compress.LZ4Compressor},bloomFilterFpChance=0.01,memtable_flush_period_in_ms=0,caching=KEYS_ONLY,defaultTimeToLive=0,speculative_retry=99.0PERCENTILE,indexInterval=128,populateIoCacheOnFlush=false,droppedColumns={},triggers={}]}, strategy_options: {replication_factor=2}, durable_writes: true
[MigrationStage:1] INFO org.apache.cassandra.db.ColumnFamilyStore - Enqueuing flush of Memtable-schema_keyspaces@645015487(251/2510 serialized/live bytes, 7 ops)
[FlushWriter:1] INFO org.apache.cassandra.db.Memtable - Writing Memtable-schema_keyspaces@645015487(251/2510 serialized/live bytes, 7 ops)
[FlushWriter:1] INFO org.apache.cassandra.db.Memtable - Completed flushing target/embeddedCassandra/data/system/schema_keyspaces/system-schema_keyspaces-jb-1-Data.db (216 bytes) for commitlog position ReplayPosition(segmentId=1384769522823, position=90960)
[MigrationStage:1] INFO org.apache.cassandra.db.ColumnFamilyStore - Enqueuing flush of Memtable-schema_columnfamilies@1026641493(28865/288650 serialized/live bytes, 451 ops)
[FlushWriter:1] INFO org.apache.cassandra.db.Memtable - Writing Memtable-schema_columnfamilies@1026641493(28865/288650 serialized/live bytes, 451 ops)
[FlushWriter:1] INFO org.apache.cassandra.db.Memtable - Completed flushing target/embeddedCassandra/data/system/schema_columnfamilies/system-schema_columnfamilies-jb-1-Data.db (5716 bytes) for commitlog position ReplayPosition(segmentId=1384769522823, position=90960)
[MigrationStage:1] INFO org.apache.cassandra.db.ColumnFamilyStore - Enqueuing flush of Memtable-schema_columns@440702060(51047/510470 serialized/live bytes, 848 ops)
[FlushWriter:1] INFO org.apache.cassandra.db.Memtable - Writing Memtable-schema_columns@440702060(51047/510470 serialized/live bytes, 848 ops)
[FlushWriter:1] INFO org.apache.cassandra.db.Memtable - Completed flushing target/embeddedCassandra/data/system/schema_columns/system-schema_columns-jb-1-Data.db (10107 bytes) for commitlog position ReplayPosition(segmentId=1384769522823, position=90960)
[MigrationStage:1] INFO org.apache.cassandra.db.DefsTables - Loading org.apache.cassandra.config.CFMetaData@213fdeca[cfId=c5e99f16-8677-3914-b17e-960613512345,ksName=system_traces,cfName=sessions,cfType=Standard,comparator=org.apache.cassandra.db.marshal.CompositeType(org.apache.cassandra.db.marshal.UTF8Type,org.apache.cassandra.db.marshal.ColumnToCollectionType(706172616d6574657273:org.apache.cassandra.db.marshal.MapType(org.apache.cassandra.db.marshal.UTF8Type,org.apache.cassandra.db.marshal.UTF8Type))),comment=traced sessions,readRepairChance=0.0,dclocalReadRepairChance=0.0,replicateOnWrite=true,gcGraceSeconds=0,defaultValidator=org.apache.cassandra.db.marshal.BytesType,keyValidator=org.apache.cassandra.db.marshal.UUIDType,minCompactionThreshold=4,maxCompactionThreshold=32,column_metadata={java.nio.HeapByteBuffer[pos=0 lim=8 cap=8]=ColumnDefinition{name=6475726174696f6e, validator=org.apache.cassandra.db.marshal.Int32Type, type=REGULAR, componentIndex=0, indexName=null, indexType=null}, java.nio.HeapByteBuffer[pos=0 lim=10 cap=10]=ColumnDefinition{name=73657373696f6e5f6964, validator=org.apache.cassandra.db.marshal.UUIDType, type=PARTITION_KEY, componentIndex=null, indexName=null, indexType=null}, java.nio.HeapByteBuffer[pos=0 lim=10 cap=10]=ColumnDefinition{name=706172616d6574657273, validator=org.apache.cassandra.db.marshal.MapType(org.apache.cassandra.db.marshal.UTF8Type,org.apache.cassandra.db.marshal.UTF8Type), type=REGULAR, componentIndex=0, indexName=null, indexType=null}, java.nio.HeapByteBuffer[pos=0 lim=10 cap=10]=ColumnDefinition{name=737461727465645f6174, validator=org.apache.cassandra.db.marshal.TimestampType, type=REGULAR, componentIndex=0, indexName=null, indexType=null}, java.nio.HeapByteBuffer[pos=0 lim=7 cap=7]=ColumnDefinition{name=72657175657374, validator=org.apache.cassandra.db.marshal.UTF8Type, type=REGULAR, componentIndex=0, indexName=null, indexType=null}, java.nio.HeapByteBuffer[pos=0 lim=11 cap=11]=ColumnDefinition{name=636f6f7264696e61746f72, validator=org.apache.cassandra.db.marshal.InetAddressType, type=REGULAR, componentIndex=0, indexName=null, indexType=null}},compactionStrategyClass=class org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy,compactionStrategyOptions={},compressionOptions={sstable_compression=org.apache.cassandra.io.compress.LZ4Compressor},bloomFilterFpChance=0.01,memtable_flush_period_in_ms=0,caching=KEYS_ONLY,defaultTimeToLive=0,speculative_retry=99.0PERCENTILE,indexInterval=128,populateIoCacheOnFlush=false,droppedColumns={},triggers={}]
[MigrationStage:1] INFO org.apache.cassandra.db.ColumnFamilyStore - Initializing system_traces.sessions
[MigrationStage:1] INFO org.apache.cassandra.db.DefsTables - Loading org.apache.cassandra.config.CFMetaData@26d6221b[cfId=8826e8e9-e16a-3728-8753-3bc1fc713c25,ksName=system_traces,cfName=events,cfType=Standard,comparator=org.apache.cassandra.db.marshal.CompositeType(org.apache.cassandra.db.marshal.TimeUUIDType,org.apache.cassandra.db.marshal.UTF8Type),comment=,readRepairChance=0.0,dclocalReadRepairChance=0.0,replicateOnWrite=true,gcGraceSeconds=0,defaultValidator=org.apache.cassandra.db.marshal.BytesType,keyValidator=org.apache.cassandra.db.marshal.UUIDType,minCompactionThreshold=4,maxCompactionThreshold=32,column_metadata={java.nio.HeapByteBuffer[pos=0 lim=10 cap=10]=ColumnDefinition{name=73657373696f6e5f6964, validator=org.apache.cassandra.db.marshal.UUIDType, type=PARTITION_KEY, componentIndex=null, indexName=null, indexType=null}, java.nio.HeapByteBuffer[pos=0 lim=6 cap=6]=ColumnDefinition{name=736f75726365, validator=org.apache.cassandra.db.marshal.InetAddressType, type=REGULAR, componentIndex=1, indexName=null, indexType=null}, java.nio.HeapByteBuffer[pos=0 lim=6 cap=6]=ColumnDefinition{name=746872656164, validator=org.apache.cassandra.db.marshal.UTF8Type, type=REGULAR, componentIndex=1, indexName=null, indexType=null}, java.nio.HeapByteBuffer[pos=0 lim=8 cap=8]=ColumnDefinition{name=6163746976697479, validator=org.apache.cassandra.db.marshal.UTF8Type, type=REGULAR, componentIndex=1, indexName=null, indexType=null}, java.nio.HeapByteBuffer[pos=0 lim=14 cap=14]=ColumnDefinition{name=736f757263655f656c6170736564, validator=org.apache.cassandra.db.marshal.Int32Type, type=REGULAR, componentIndex=1, indexName=null, indexType=null}, java.nio.HeapByteBuffer[pos=0 lim=8 cap=8]=ColumnDefinition{name=6576656e745f6964, validator=org.apache.cassandra.db.marshal.TimeUUIDType, type=CLUSTERING_KEY, componentIndex=0, indexName=null, indexType=null}},compactionStrategyClass=class org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy,compactionStrategyOptions={},compressionOptions={sstable_compression=org.apache.cassandra.io.compress.LZ4Compressor},bloomFilterFpChance=0.01,memtable_flush_period_in_ms=0,caching=KEYS_ONLY,defaultTimeToLive=0,speculative_retry=99.0PERCENTILE,indexInterval=128,populateIoCacheOnFlush=false,droppedColumns={},triggers={}]
[MigrationStage:1] INFO org.apache.cassandra.db.ColumnFamilyStore - Initializing system_traces.events
[pool-1-thread-1] INFO org.apache.cassandra.db.ColumnFamilyStore - Enqueuing flush of Memtable-local@878259848(84/840 serialized/live bytes, 6 ops)
[FlushWriter:1] INFO org.apache.cassandra.db.Memtable - Writing Memtable-local@878259848(84/840 serialized/live bytes, 6 ops)
[FlushWriter:1] INFO org.apache.cassandra.db.Memtable - Completed flushing target/embeddedCassandra/data/system/local/system-local-jb-3-Data.db (110 bytes) for commitlog position ReplayPosition(segmentId=1384769522823, position=91219)
[pool-1-thread-1] INFO org.apache.cassandra.db.ColumnFamilyStore - Enqueuing flush of Memtable-local@1337654277(10082/100820 serialized/live bytes, 257 ops)
[FlushWriter:1] INFO org.apache.cassandra.db.Memtable - Writing Memtable-local@1337654277(10082/100820 serialized/live bytes, 257 ops)
[FlushWriter:1] INFO org.apache.cassandra.db.Memtable - Completed flushing target/embeddedCassandra/data/system/local/system-local-jb-4-Data.db (5245 bytes) for commitlog position ReplayPosition(segmentId=1384769522823, position=103202)
[CompactionExecutor:2] INFO org.apache.cassandra.db.compaction.CompactionTask - Compacting [SSTableReader(path='target/embeddedCassandra/data/system/local/system-local-jb-3-Data.db'), SSTableReader(path='target/embeddedCassandra/data/system/local/system-local-jb-1-Data.db'), SSTableReader(path='target/embeddedCassandra/data/system/local/system-local-jb-4-Data.db'), SSTableReader(path='target/embeddedCassandra/data/system/local/system-local-jb-2-Data.db')]
[CompactionExecutor:2] INFO org.apache.cassandra.db.ColumnFamilyStore - Enqueuing flush of Memtable-compaction_history@1701650929(388/3880 serialized/live bytes, 10 ops)
[FlushWriter:1] INFO org.apache.cassandra.db.Memtable - Writing Memtable-compaction_history@1701650929(388/3880 serialized/live bytes, 10 ops)
[FlushWriter:1] INFO org.apache.cassandra.db.Memtable - Completed flushing target/embeddedCassandra/data/system/compaction_history/system-compaction_history-jb-1-Data.db (255 bytes) for commitlog position ReplayPosition(segmentId=1384769522823, position=103783)
[CompactionExecutor:2] INFO org.apache.cassandra.db.compaction.CompactionTask - Compacted 4 sstables to [target/embeddedCassandra/data/system/local/system-local-jb-5,]. 5,830 bytes to 5,671 (~97% of original) in 39ms = 0.138674MB/s. 4 total rows, 1 unique. Row merge counts were {1:0, 2:0, 3:0, 4:1, }
[pool-1-thread-1] INFO org.apache.cassandra.service.StorageService - Node /127.0.0.1 state jump to normal
[pool-1-thread-1] INFO org.apache.cassandra.service.StorageService - Startup completed! Now serving reads.
[pool-1-thread-1] INFO org.apache.cassandra.transport.Server - Starting listening for CQL clients on localhost/127.0.0.1:9542...
[pool-1-thread-1] INFO org.apache.cassandra.thrift.ThriftServer - Using TFramedTransport with a max frame size of 15728640 bytes.
[pool-1-thread-1] INFO org.apache.cassandra.thrift.ThriftServer - Binding thrift service to localhost/127.0.0.1:9560
[pool-1-thread-1] WARN com.thinkaurelius.thrift.TDisruptorServer - Off-heap allocation couldn't be used as JNA is not present in classpath or broken, using on-heap instead.
[pool-1-thread-1] INFO org.apache.cassandra.thrift.THsHaDisruptorServer - Starting up org.apache.cassandra.thrift.THsHaDisruptorServer@198ec596
[pool-1-thread-1] INFO org.apache.cassandra.thrift.TServerCustomFactory - Using custom half-sync/half-async thrift server on localhost : 9560
[Thread-2] INFO org.apache.cassandra.thrift.ThriftServer - Listening for thrift clients...
-- disconnect
Connected to cluster cassy-1
Datacenter: datacenter1; Host: /127.0.0.1; Rack: rack1
-- connect
Connected to cluster cassy-1
Datacenter: datacenter1; Host: /127.0.0.1; Rack: rack1
session : cluster2
session connect timeout: 5000
[StorageServiceShutdownHook] INFO org.apache.cassandra.thrift.ThriftServer - Stop listening to thrift clients
[StorageServiceShutdownHook] INFO org.apache.cassandra.transport.Server - Stop listening for CQL clients
[StorageServiceShutdownHook] INFO org.apache.cassandra.gms.Gossiper - Announcing shutdown
[StorageServiceShutdownHook] INFO org.apache.cassandra.net.MessagingService - Waiting for messaging service to quiesce
[ACCEPT-/127.0.0.1] INFO org.apache.cassandra.net.MessagingService - MessagingService shutting down server thread.
로그보면 cassandra 2.0.2로 실행된 것을 볼 수 있다. 기타 버전은 참고할 수 있다.
[pool-1-thread-1] INFO org.apache.cassandra.service.StorageService - Cassandra version: 2.0.2
[pool-1-thread-1] INFO org.apache.cassandra.service.StorageService - Thrift API version: 19.38.0
[pool-1-thread-1] INFO org.apache.cassandra.service.StorageService - CQL supported versions: 2.0.0,3.1.1 (default: 3.1.1)
[pool-1-thread-1] INFO org.apache.cassandra.service.StorageService - Loading persisted ring state
'nosql' 카테고리의 다른 글
cassandra bulk insert (대량 입력)시.. (0) | 2013.12.12 |
---|---|
cassandra 운영 툴 - ops center, dev center (0) | 2013.11.26 |
cassandra 2.0 - mysql의 show tables, show databases와 같은 기능 (0) | 2013.11.18 |
cassandra 2.0.2 - insert 시 기존 데이터 update (append 되지 않음) (0) | 2013.11.18 |
cassandra 2.0 - data type 지원 (primitive type, map, set, list) (1) | 2013.11.13 |