使用python将大列表插入Cassandra
我在使用python将大列表插入Cassandra时遇到问题。我有一个3200字符串的列表,我想保存在Cassandra中:使用python将大列表插入Cassandra,python,list,python-3.x,cassandra,Python,List,Python 3.x,Cassandra,我在使用python将大列表插入Cassandra时遇到问题。我有一个3200字符串的列表,我想保存在Cassandra中: CREATE TABLE IF NOT EXISTS my_test ( id bigint PRIMARY KEY, list_strings list<text> ); 但如果我保留全部列表,我有一个错误: Error from server: code=1500 [
CREATE TABLE IF NOT EXISTS my_test (
id bigint PRIMARY KEY,
list_strings list<text>
);
但如果我保留全部列表,我有一个错误:
Error from server: code=1500 [Replica(s) failed to execute write] message="Operation failed - received 0 responses and 1 failures" info={'required_responses': 1, 'consistency': 'LOCAL_ONE', 'received_responses': 0, 'failures': 1}
如何将大列表插入Cassandra 不支持DB数组类型保存该数据量。使用表的不同行存储每个字符串会更好:
id | time | strings
-----------+------------+---------
bigint | timestamp | string
partition | clustering |
使用id作为集群密钥将是一个糟糕的解决方案,因为当从用户id请求所有tweet时,它将需要在多个节点中读取,而当用作分区密钥时,它将只需要在每个用户的一个节点中读取。不支持DB数组类型来保存该数据量。使用表的不同行存储每个字符串会更好:
id | time | strings
-----------+------------+---------
bigint | timestamp | string
partition | clustering |
使用id作为集群密钥将是一个糟糕的解决方案,因为当从用户id请求所有tweet时,它将需要在多个节点中读取,而当用作分区密钥时,它将只需要在每个用户的一个节点中读取。将3.200字符串列表插入Cassandra中的单个单元格的概念可能是错误的。为什么不将每个字符串作为不同的行插入?这样我的模型就错了?我应该只插入:id string1 id string2…可能,在不了解有关此表的更多信息的情况下,我无法100%确定。你能告诉我一些上下文以便我能帮助你更多吗?Id是twitter上的一个用户,字符串列表是他们的tweet(JSON)列表好的,那么,依我看,你应该使用2个主键列。第一个仍然应该是用户id,并且应该是分区键。第二个应该是一个包含整数(大小取决于数据)或时间戳的聚类键,如果这给了您任何类型的信息,并且您可以以足够的精度获得这些信息,那么对于同一用户,tweet不会与其他tweet位于同一时间戳中。主键之外的最后一列是纯文本列,您可以在其中存储一条tweet。您熟悉分区键和集群键吗?在Cassandra中将3.200字符串列表插入单个单元格的概念可能是错误的。为什么不将每个字符串作为不同的行插入?这样我的模型就错了?我应该只插入:id string1 id string2…可能,在不了解有关此表的更多信息的情况下,我无法100%确定。你能告诉我一些上下文以便我能帮助你更多吗?Id是twitter上的一个用户,字符串列表是他们的tweet(JSON)列表好的,那么,依我看,你应该使用2个主键列。第一个仍然应该是用户id,并且应该是分区键。第二个应该是一个包含整数(大小取决于数据)或时间戳的聚类键,如果这给了您任何类型的信息,并且您可以以足够的精度获得这些信息,那么对于同一用户,tweet不会与其他tweet位于同一时间戳中。主键之外的最后一列是纯文本列,您可以在其中存储一条tweet。您熟悉分区和集群键吗?