示例#1
0
        private static void GetReview(int movieId, StreamReader reader, ReviewDatabaseLayer <NonIndexedReview> reviewDb)
        {
            var watch = new Stopwatch();

            watch.Start();

            var counter = 0;

            var reviews = new List <Review> ();

            string line;

            while ((line = reader.ReadLine()) != null)
            {
                var splits = line.Split(',');
                var review = new Review
                {
                    MovieId = movieId,
                    UserId  = int.Parse(splits[0]),
                    Note    = int.Parse(splits[1]),
                    Date    = DateTime.Parse(splits[2])
                };

                reviews.Add(review);

                counter++;
            }
        }
示例#2
0
        private static void GetReview(string path, ReviewDatabaseLayer <NonIndexedReview> reviewDb)
        {
            using (var reader = File.OpenText(path))
            {
                var line    = reader.ReadLine();
                var movieId = int.Parse(line.Substring(0, line.Length - 1));

                GetReview(movieId, reader, reviewDb);
            }

            var count = Interlocked.Increment(ref _reviewCounter);

            Logger.Info(string.Format("{0} review done : {1}", count, path));
        }
示例#3
0
        public static void ImportReviews(string directory = DefaultReviewDirectory)
        {
            if (!string.IsNullOrEmpty(directory))
            {
                if (Directory.Exists(directory))
                {
                    // on crée l'objet qui gère la base
                    var reviewDb = new ReviewDatabaseLayer <NonIndexedReview>();

                    // on choppe tous les fichiers du dossier
                    var allFiles = Directory.GetFiles(directory);
                    var files    = new List <string>();

                    // juste un trie parce que j'ai du le faire en plusieurs fois mmm
                    foreach (var f in allFiles)
                    {
                        if (CheckFile(f))
                        {
                            files.Add(f);
                        }
                    }

                    allFiles = null;

                    // On découpe la liste de fichier...
                    var splits = files.Split(200);

                    // On fait le boulot en parallèle, mais pour chaque groupe de fichiers
                    foreach (var groupOfFiles in splits)
                    {
                        var bag = new ConcurrentBag <NonIndexedReview>();
                        Parallel.ForEach(groupOfFiles, currentFile =>
                        {
                            GetReview(currentFile, bag);
                        });

                        var watch = new Stopwatch();
                        watch.Start();

                        Logger.Info(string.Format("Saving {0} reviews", bag.Count));

                        reviewDb.Save(bag);

                        watch.Stop();
                        Logger.Info(string.Format("Saved in {0} ms", watch.Elapsed));
                    }

//					var counter = 0;
//					foreach(var file in files)
//					{
//						if (counter++ > 500)
//							return;
//
//						GetReview(file, reviewDb);
//					}
                }
                else
                {
                    Logger.Error(string.Format("Directory {0} does not exist", directory));
                }
            }
            else
            {
                Logger.Error("Je crois, c'est pas bon");
            }
        }
示例#4
0
        public override void Import()
        {
            if (!string.IsNullOrEmpty(Source))
            {
                if (Directory.Exists(Source))
                {
                    // on crée l'objet qui gère la base
                    var reviewDb = new ReviewDatabaseLayer <NonIndexedReview>(Target);

                    // on choppe tous les fichiers du dossier
                    var allFiles = Directory.GetFiles(Source);
                    var files    = new List <string>();

                    // pour calculer la progression
                    var totalFileCount = allFiles.Length;

                    // juste un trie parce que j'ai du le faire en plusieurs fois mmm
                    if (StartFile > 0)
                    {
                        foreach (var f in allFiles)
                        {
                            if (CheckFile(f))
                            {
                                files.Add(f);
                            }
                        }
                    }

                    allFiles = null;

                    // On découpe la liste de fichier...
                    var splits = files.Split(ChunkSize);

                    // On fait le boulot en parallèle, mais pour chaque groupe de fichiers
                    foreach (var groupOfFiles in splits)
                    {
                        var bag = new ConcurrentBag <NonIndexedReview>();
                        Parallel.ForEach(groupOfFiles, currentFile =>
                        {
                            GetReview(currentFile, bag);
                        });

                        // On a mis les reviews dans un bag en // mais on fait la sauvegarder sur un thread, c'est El Goulot
                        var watch = new Stopwatch();
                        watch.Start();

                        var message = string.Format("Saving {0} reviews", bag.Count);
                        Logger.Info(message);

                        // On cancel avant le save, qui est suuper long
                        if (CancelationPending)
                        {
                            Report(0, "Importation cancelled");

                            return;
                        }

                        // Progress
                        var progress = ((float)_fileCount) / totalFileCount * 100;
                        Report(progress, message);

                        reviewDb.Save(bag);

                        watch.Stop();

                        var savedMessage = string.Format("Saved in {0} ms", watch.Elapsed);

                        Report(progress, savedMessage);
                        Logger.Info(savedMessage);
                    }
                }
                else
                {
                    throw new ArgumentException(string.Format("File {0} does not exist", Source));
                }
            }
            else
            {
                throw new ArgumentNullException("Source can not be null or empty");
            }
        }