我在sql server中有数十亿行数据。我们现在改用 Cassandra 作为数据仓库来执行分析工作。 SQL Server 将充当 OLTP,Cassandra 将充当 OLAP。数据导入 cassandra 是通过 datastax c# 驱动程序执行的。我一直在尝试通过 datastax c# 驱动程序插入 cassandra 的各种方法。插入大量数据的最佳方式是什么?
我创建了各种 PCO(普通 cassandra 对象),它们是 Cassandra Column 系列的映射器。列族有30多列。
[Table("CF_Data")]
internal class CF_Data
{
[PartitionKey]
public Guid Date{ get; set; }
public DateTimeOffset Name { get; set; }
.................
}
第一种方法: 我正在创建上述类的实例并将其绑定(bind)到批处理语句。最后执行每 1000 行的批处理。
var batch =session.CreateBatch();;
foreach (cf_Data val in lsData)
{
try
{
if (((count) % 1000) == 1)
{
batch = session.CreateBatch();
}
batch.Append(table.Insert(val));
if (count % 1000 == 0)
{
batch.Execute();
}
}
catch (Exception)
{
throw;
}
count++;
}
第二种方法: 通过Mapper每行插入数据。
try
{
IMapper mapper = new Mapper(session);
foreach (CF_Data val in listData)
{
try
{
mapper.Insert(val);
}
catch (Exception)
{
//throw;
}
}
}
catch (Exception)
{
throw;
}
我还通过绑定(bind)CF_Data实例的每个属性,通过PreparedStatement和BatchStatement插入数据,但是我如何将CF_Data实例(要插入的一行)绑定(bind)到PreparedStatement。
PreparedStatement ps = session.Prepare(@"INSERT INTO CF_Data
(
Date,
Name, ....
) " +
"VALUES (now(),?, ?, ?, ?,?,?,?,?,?,?,?,?,?,?,?,?)");
什么是最好的网络拓扑(replication_factor、snitch等),以通过足够的数据副本获得最佳性能,从而避免单点故障?现在我使用的是最简单的策略和 3 的复制因子。如何像 Cassandra 团队所说的那样,读取速度快如闪电?
最佳答案
最好不要使用Insert(***)进行海量数据迁移,cassandra提供“Copy ** from **”从csv导入数据,超过6M数据记录可能会导致超时,而且更好的方法是@jorgebg说的是sstableloader来加载海量数据,这肯定会满足您的需求。
关于c# - 在 C# 中将数据导入 Cassandra Cluster 的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30597941/