簡體   English   中英

在C#中將數據導入Cassandra Cluster的最佳方法

[英]Best way to import data into Cassandra Cluster in c#

我在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; }
    .................
}

第一種方法:我正在創建上述類的實例並將其綁定到批處理語句。 最后執行每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;
        }

我還通過綁定CF_Data實例的每個屬性,通過帶有BatchStatement的PreparedStatement插入了數據,但是如何將CF_Data的實例(要插入的一行)綁定到PreparedStatement。

PreparedStatement ps = session.Prepare(@"INSERT INTO CF_Data
                (
                    Date,
                    Name, ....
                ) " +
                "VALUES (now(),?, ?, ?, ?,?,?,?,?,?,?,?,?,?,?,?,?)");

最好的網絡拓撲(replication_factor,snitch等)具有最佳性能並具有足夠多的數據副本以避免單點故障? 現在,我已經使用了simplestrategy&Replication_factor of3。如何像Cassandra團隊所說的那樣快速閱讀?

您最好不要使用Insert(***)進行大量數據遷移,cassandra提供“從**復制**”以從csv導入數據,這可能會導致超過6 M的數據記錄超時,更好的方法是@jorgebg說是sstableloader來加載海量數據,這肯定會滿足您的需求。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM