Example #1
0
        public void TransferAll()
        {
            var stopwatch = Stopwatch.StartNew();
            var cursor    = 0;

            var sourceCollection = OpenSourceCollection();

            while (true)
            {
                using (var destinationContext = new EnronSqlContext(DestinationSqlConnectionStringName))
                //using (var transactionScope = new TransactionScope())
                {
                    destinationContext.Configuration.AutoDetectChangesEnabled = false;

                    try
                    {
                        var batch = sourceCollection.Skip(cursor).Limit(Configuration.BatchSize).ToEnumerable();

                        if (!batch.Any())
                        {
                            break;
                        }

                        var convertedMails = batch
                                             //.AsParallel()
                                             .Select(originalEmail => EmailConverter.ConvertEmail(originalEmail))
                                             .ToArray();

                        destinationContext.Mail.AddRange(convertedMails);
                        //destinationContext.BulkInsert(convertedMails);
                        destinationContext.SaveChanges();
                        //transactionScope.Complete();

                        //var senders = convertedMails.Select(_ => _.Sender);
                        //var recipients = convertedMails.SelectMany(_ => _.Recipients);
                        //var headers = convertedMails.SelectMany(_ => _.Headers);

                        //destinationContext.Sender.AddRange(senders);
                        //destinationContext.Recipient.AddRange(recipients);
                        //destinationContext.Header.AddRange(headers);

                        //destinationContext.SaveChanges();

                        cursor += Configuration.BatchSize;

                        Console.WriteLine(
                            "Converted {0} messages ({1} per minute)",
                            cursor,
                            cursor / stopwatch.Elapsed.TotalMilliseconds * 1000 * 60);
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine("Exception occurred (retrying in 10s):" + e.ToString());
                        Thread.Sleep(TimeSpan.FromSeconds(10));
                    }
                }
            }
        }
Example #2
0
 public EmailTransferManager(
     string sourceMongoConnectionStringName,
     string destinationSqlConnectionStringName,
     EmailConverter emailConverter,
     Configuration configuration)
 {
     SourceMongoConnectionStringName    = sourceMongoConnectionStringName;
     DestinationSqlConnectionStringName = destinationSqlConnectionStringName;
     EmailConverter = emailConverter;
     Configuration  = configuration;
 }
Example #3
0
        static void Main(string[] args)
        {
            var emailAccountProvider =                       //new LockingEmailAccountProviderDecorator(
                                       new CachingEmailAccountProviderDecorator(
                new EmailAccountProvider("SQLDestination")); //);

            var emailConverter = new EmailConverter(emailAccountProvider);

            var emailTransferManager = new EmailTransferManager(
                "MongoDBSource",
                "SQLDestination",
                emailConverter,
                new Configuration());

            emailTransferManager.TransferAll();
        }