Cassandra Demo--Python操作cassandra

本文详细介绍了如何使用Cassandra数据库,包括创建keyspace和table,以及通过Python进行数据插入的操作方法。特别关注了数据中心名称的正确配置对于数据一致性和可用性的影响,并提供了具体的错误示例和解决策略。

================================================================

创建keyspace和table

CREATE KEYSPACE exps  
WITH REPLICATION = { 'class' : 'NetworkTopologyStrategy', 'DC1' : 2 };

create table exps_user(user_id int primary key,user_name varchar,user_info text);

create index idx_user_name on exps_user(user_name);

 注意在创建keyspace时,数据中心的名称需要区分大小写,如果数据中心名称写错,创建keyspace和table能成功,但INSERT数据时会报错。

在cqlsh上报NoHostAvailable错误,如果使用python访问,会报下面错误:

Error from server: code=1000 [Unavailable exception] message="Cannot achieve consistency level LOCAL_ONE" info={'consistency': 'LOCAL_ONE', 'required_replicas': 1, 'alive_replicas': 0}

 

================================================================

需要安装python依赖包cassandra-driver:

from cassandra.cluster import Cluster
from cassandra.policies import DCAwareRoundRobinPolicy
from cassandra import ConsistencyLevel

cluster_instances = ['192.168.199.171', '192.168.199.172', '192.168.199.173']
cluster = Cluster(
    cluster_instances,
    load_balancing_policy=DCAwareRoundRobinPolicy(local_dc='DC1'),
    port=9042
)

session = cluster.connect("exps")
for user_id in range(1, 50000):
    try:
        sql_script = ("insert into exps_user(user_id,user_name,user_info)"
                      "VALUES({0},'U{0}','THIS IS TEST');").format(user_id)
        user_lookup_stmt = session.prepare(sql_script)
        user_lookup_stmt.consistency_level = ConsistencyLevel.LOCAL_ONE
        user1 = session.execute(user_lookup_stmt, [])
    except Exception as ex:
        print(str(ex))

 

转载于:https://www.cnblogs.com/gaogao67/p/10428498.html

version: '3' services: # Seed节点(集群发现的核心节点) cassandra-seed: image: rdsource.tp-link.com:8088/cassandra:latest container_name: cassandra-seed environment: - CASSANDRA_CLUSTER_NAME=MyDockerCluster # 所有节点集群名必须一致 - CASSANDRA_SEEDS=cassandra-seed # Seed节点指向自身 - CASSANDRA_LISTEN_ADDRESS=cassandra-seed # 容器间通信地址(用服务名) - CASSANDRA_RPC_ADDRESS=0.0.0.0 # 允许外部客户端连接 - MAX_HEAP_SIZE=1G # JVM堆内存(总内存16G,3节点各1-2G即可) - HEAP_NEWSIZE=256M ports: - "9042:9042" # 暴露CQL端口到主机 volumes: - cassandra-seed-data:/var/lib/cassandra # 数据持久化 # 节点2 cassandra-node2: image: rdsource.tp-link.com:8088/cassandra:latest container_name: cassandra-node2 environment: - CASSANDRA_CLUSTER_NAME=MyDockerCluster - CASSANDRA_SEEDS=cassandra-seed # 指向Seed节点,加入集群 - CASSANDRA_LISTEN_ADDRESS=cassandra-node2 - CASSANDRA_RPC_ADDRESS=0.0.0.0 - MAX_HEAP_SIZE=1G - HEAP_NEWSIZE=256M ports: - "9043:9042" # 主机端口避免冲突 volumes: - cassandra-node2-data:/var/lib/cassandra depends_on: - cassandra-seed # 等待Seed节点启动后再启动 # 节点3 cassandra-node3: image: rdsource.tp-link.com:8088/cassandra:latest container_name: cassandra-node3 environment: - CASSANDRA_CLUSTER_NAME=MyDockerCluster - CASSANDRA_SEEDS=cassandra-seed - CASSANDRA_LISTEN_ADDRESS=cassandra-node3 - CASSANDRA_RPC_ADDRESS=0.0.0.0 - MAX_HEAP_SIZE=1G - HEAP_NEWSIZE=256M ports: - "9044:9042" volumes: - cassandra-node3-data:/var/lib/cassandra depends_on: - cassandra-seed # 定义数据卷,持久化各节点数据(避免容器删除后数据丢失) volumes: cassandra-seed-data: cassandra-node2-data: cassandra-node3-data: 设置一致性
最新发布
09-02
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值