Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cassandra 即使数据存在,卡桑德拉也不提供任何数据_Cassandra_Cqlsh_Cassandra 3.0 - Fatal编程技术网

Cassandra 即使数据存在,卡桑德拉也不提供任何数据

Cassandra 即使数据存在,卡桑德拉也不提供任何数据,cassandra,cqlsh,cassandra-3.0,Cassandra,Cqlsh,Cassandra 3.0,我有一个复制因子为3的键空间。我正在使用写入一致性级别1将数据插入Cassandra(具有单个数据中心的4节点集群)。插入完成后,我将读取一致性级别为quorum(2)的数据。但有时即使数据存在,我也不会得到数据,一段时间后,我会用相同的查询得到数据。我不知道卡桑德拉为什么会这样 我的列族模式 CREATE TABLE input_data_profile.input_log_profile_1 ( cid text, ctdon bigint, ctdat bigint

我有一个复制因子为3的键空间。我正在使用写入一致性级别1将数据插入Cassandra(具有单个数据中心的4节点集群)。插入完成后,我将读取一致性级别为quorum(2)的数据。但有时即使数据存在,我也不会得到数据,一段时间后,我会用相同的查询得到数据。我不知道卡桑德拉为什么会这样

我的列族模式

CREATE TABLE input_data_profile.input_log_profile_1 (
    cid text,
    ctdon bigint,
    ctdat bigint,
    email text,
    addrs set<frozen<udt_addrs>>,
    asset set<frozen<udt_asset>>,
    cntno set<frozen<udt_cntno>>,
    dob frozen<udt_date>,
    dvc set<frozen<udt_dvc>>,
    eaka set<text>,
    edmn text,
    educ set<frozen<udt_educ>>,
    gen tinyint,
    hobby set<text>,
    income set<frozen<udt_income>>,
    interest set<text>,
    lang set<frozen<udt_lang>>,
    levnt set<frozen<udt_levnt>>,
    like map<text, frozen<set<text>>>,
    loc set<frozen<udt_loc>>,
    mapp set<text>,
    name frozen<udt_name>,
    params map<text, frozen<set<text>>>,
    prfsn set<frozen<udt_prfsn>>,
    rel set<frozen<udt_rel>>,
    rel_s tinyint,
    skills_prfsn set<frozen<udt_skill_prfsn>>,
    snw set<frozen<udt_snw>>,
    sport set<text>,
    status tinyint,
    z_addrs tinyint,
    z_asset tinyint,
    z_cntno tinyint,
    z_dob tinyint,
    z_dvc tinyint,
    z_eaka tinyint,
    z_educ tinyint,
    z_email tinyint,
    z_gen tinyint,
    z_hobby tinyint,
    z_income tinyint,
    z_interest tinyint,
    z_lang tinyint,
    z_levnt tinyint,
    z_like tinyint,
    z_loc tinyint,
    z_mapp tinyint,
    z_name tinyint,
    z_params tinyint,
    z_prfsn tinyint,
    z_rel tinyint,
    z_rel_s tinyint,
    z_skills_prfsn tinyint,
    z_snw tinyint,
    z_sport tinyint,
    PRIMARY KEY (cid, ctdon, ctdat, email)
) WITH CLUSTERING ORDER BY (ctdon ASC, ctdat ASC, email ASC)
CREATE INDEX input_log_profile_1_z_snw_idx ON input_data_profile.input_log_profile_1 (z_snw);
CREATE INDEX input_log_profile_1_z_prfsn_idx ON input_data_profile.input_log_profile_1 (z_prfsn);
CREATE INDEX input_log_profile_1_z_hobby_idx ON input_data_profile.input_log_profile_1 (z_hobby);
CREATE INDEX input_log_profile_1_z_rel_idx ON input_data_profile.input_log_profile_1 (z_rel);
CREATE INDEX input_log_profile_1_z_gen_idx ON input_data_profile.input_log_profile_1 (z_gen);
CREATE INDEX input_log_profile_1_z_mapp_idx ON input_data_profile.input_log_profile_1 (z_mapp);
CREATE INDEX input_log_profile_1_z_dvc_idx ON input_data_profile.input_log_profile_1 (z_dvc);
CREATE INDEX input_log_profile_1_z_skills_prfsn_idx ON input_data_profile.input_log_profile_1 (z_skills_prfsn);
CREATE INDEX input_log_profile_1_z_eaka_idx ON input_data_profile.input_log_profile_1 (z_eaka);
CREATE INDEX input_log_profile_1_z_name_idx ON input_data_profile.input_log_profile_1 (z_name);
CREATE INDEX input_log_profile_1_z_cntno_idx ON input_data_profile.input_log_profile_1 (z_cntno);
CREATE INDEX input_log_profile_1_z_educ_idx ON input_data_profile.input_log_profile_1 (z_educ);
CREATE INDEX input_log_profile_1_z_loc_idx ON input_data_profile.input_log_profile_1 (z_loc);
CREATE INDEX input_log_profile_1_z_email_idx ON input_data_profile.input_log_profile_1 (z_email);
CREATE INDEX input_log_profile_1_z_interest_idx ON input_data_profile.input_log_profile_1 (z_interest);
CREATE INDEX input_log_profile_1_z_asset_idx ON input_data_profile.input_log_profile_1 (z_asset);
CREATE INDEX input_log_profile_1_z_like_idx ON input_data_profile.input_log_profile_1 (z_like);
CREATE INDEX input_log_profile_1_z_rel_s_idx ON input_data_profile.input_log_profile_1 (z_rel_s);
CREATE INDEX input_log_profile_1_z_lang_idx ON input_data_profile.input_log_profile_1 (z_lang);
CREATE INDEX input_log_profile_1_z_addrs_idx ON input_data_profile.input_log_profile_1 (z_addrs);
CREATE INDEX input_log_profile_1_z_dob_idx ON input_data_profile.input_log_profile_1 (z_dob);
CREATE INDEX input_log_profile_1_z_income_idx ON input_data_profile.input_log_profile_1 (z_income);
CREATE INDEX input_log_profile_1_z_sport_idx ON input_data_profile.input_log_profile_1 (z_sport);
CREATE INDEX input_log_profile_1_z_params_idx ON input_data_profile.input_log_profile_1 (z_params);
CREATE TABLE input\u data\u profile.input\u log\u profile\u 1(
cid文本,
ctdon bigint,
ctdat bigint,
电子邮件文本,
地址集,
资产组,
没有设定,
dob冷冻,
dvc组,
一套,
edmn文本,
教育组,
廷因特将军,
爱好集,
收入组,
利息集,
郎集,,
levnt集,
就像地图一样,
loc集合,
mapp集合,
姓名冻结,
参数映射,
prfsn集,
rel set,
关于tinyint,
技能\u prfsn集合,
snw集,
运动套装,
状态提示,
z_addrs tinyint,
z_资产tinyint,
z_cntint,
z_dob tinyint,
z_dvc tinyint,
z_eaka tinyint,
z_educ tinyint,
z_电子邮件tinyint,
z_gen tinyint,
z_hobby tinyint,
z_收入tinyint,
z_兴趣tinyint,
z_lang tinyint,
z_levnt tinyint,
z_喜欢tinyint,
z_loc tinyint,
z_mapp tinyint,
z_name tinyint,
z_params tinyint,
z_prfsn tinyint,
z_rel tinyint,
z_rel_s tinyint,
z_skills_prfsn tinyint,
z_snw tinyint,
z_sport tinyint,
主键(cid、ctdon、ctdat、电子邮件)
)使用群集顺序(ctdon ASC、ctdat ASC、电子邮件ASC)
在输入数据配置文件上创建索引输入配置文件(z\u snw)idx。输入配置文件(z\u snw);
在input_data_profile.input_log_profile_1(z_prfsn)上创建索引input_log_profile_1_z_prfsn_idx;
在input_data_profile.input_log_profile_1(z_hobby)上创建索引input_log_profile_1_z_hobby_idx;
在输入数据配置文件上创建索引输入配置文件。输入配置文件(z_rel);
在输入数据配置文件上创建索引输入配置文件(z_gen);
在input_data_profile.input_log_profile_1(z_mapp)上创建索引input_log_profile_1_z_mapp_idx;
在input_data_profile.input_log_profile_1(z_dvc)上创建索引input_log_profile_1_z_dvc_idx;
在输入数据配置文件上创建索引输入日志配置文件1技能配置文件idx。输入日志配置文件1(技能配置文件);
在输入数据配置文件上创建索引输入配置文件(z_eaka);
在input_data_profile.input_log_profile_1(z_名称)上创建索引input_log_profile_1_z_name_idx;
在input_data_profile.input_log_profile_1(z_cntno)上创建索引input_log_profile_1_z_cntno_idx;
在input_data_profile.input_log_profile_1(z_educ)上创建索引input_log_profile_1_z_educ_idx;
在输入数据配置文件上创建索引输入配置文件(z位置);
在input_data_profile.input_log_profile_1(z_email)上创建索引input_log_profile_1_z_email_idx;
在输入数据配置文件上创建索引输入配置文件配置文件1\z\u兴趣配置文件idx。输入配置文件配置文件1(z\u兴趣);
在input_data_profile.input_log_profile_1(z_asset)上创建索引input_log_profile_1_z_asset_idx;
在input_data_profile.input_log_profile_1(类似z_)上创建索引input_log_profile_1_z_like_idx;
在输入数据配置文件上创建索引输入配置文件(z)1 z rel s idx。输入日志配置文件(z rel s);
在input_data_profile.input_log_profile_1(z_lang)上创建索引input_log_profile_1_z_lang_idx;
在input_data_profile.input_log_profile_1(z_addrs)上创建索引input_log_profile_1_z_addrs_idx;
在输入数据配置文件上创建索引输入配置文件(z dob);
在输入数据配置文件上创建索引输入配置文件(z_income)配置文件(z_income);
在input_data_profile.input_log_profile_1(z_sport))上创建索引input_log_profile_1_z_sport_idx;
在input_data_profile.input_log_profile_1(z参数)上创建索引input_log_profile_1_z参数_idx;

我需要明智地处理字段,以便为每个字段的状态编制索引。我想改进读写tps。建议我对模式进行一些修改。

如果我理解正确,那么您在这里确实提出了两个问题:

首先,您正在使用CL=1写入数据,并使用CL=Quorum读取数据,并且想知道为什么您不总是检索已写入的数据,但可以稍后检索。如果这是正确的,那么这就是卡桑德拉的预期行为。当使用CL=1写入时,3个副本中第一个响应的副本将向客户端返回成功写入。如果在将数据写入其他副本之前尝试使用Quorum进行读取,则可能无法获得返回给您的任何(或陈旧)数据。这是卡桑德拉的最终一致性部分。如果您试图在成功写入后立即读取数据,那么这可能是问题的原因,因为在Cassandra和大多数其他分布式系统中,“先读后写”是一种反模式

其次,在您的数据模式中,您使用的索引不正确。如果您使用索引来查询这些字段,那么这是一种反模式,尤其是对于您拥有的大量字段。Cassandra中的索引是一种昂贵的操作,只应在被索引列的基数较低的极少数情况下使用。看到这个了吗

如果需要按大量列进行查询,则需要重新评估数据模型,因为Cassandra在每查询一个表的方法上进行了优化,您只需查询主键中的字段。这要求您将数据反规范化到多个不同的表中,以便构建任何具有合理复杂性的应用程序。这是您在选择Cassandra提供的性能、高可用性和可扩展性时所做的权衡之一。如果您确实需要对数据执行特别查询的能力,我建议您在ins完成后查看其他数据存储。