c# - 在 C# 中将数据导入 Cassandra Cluster 的最佳方法

标签 c# cassandra batch-processing

我在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/

相关文章:

cassandra - spark-cassandra-connector 性能 : executors seem to be idle

windows - 批处理文件 - 将目录更改为子文件夹

windows - 如何在需要用户名和密码的批处理文件中打开 URL?

c# - List<T> 项删除问题

c# - 合并集合保留顺序的最有效方法?

sorting - 使用 RandomPartioner 和 Hector 作为客户端时如何从 cassandra 中获取已排序的行?

java - Apache Cassandra安装报错Windows 10 : hotspot_compiler

java - 使用 poi sxssfworkbook 附加到工作簿

c# - 当我在我的方法中传递泛型时如何获取类名?

c# - 有没有一种干净的方法可以返回 FilePathResult 并随后删除磁盘上的文件?