0

我有大约 236000 个单词的完整词典。

我将文本文件中的所有单词插入到 SQL 服务器 DB 和 MongoDb 中,确保在单词字段上的两个 DB 上都有索引。

我遍历所有 mongo 文档,将每个单词插入 C# 中的 Dictionary 需要 2.5 秒。有时略少有时略多。

我循环遍历文本文件中的所有单词,将它们插入到 C# 中的字典中,这需要 0.9 秒。有时略少有时略多。

我遍历 SQL DB 中的所有单词,将单词插入 C# 中的 Dictionary 需要 1.1 秒。有时略少有时略多。

MongoDB应该更快吗?

MongoDB:

var connectionString = "mongodb://localhost";
            var client = new MongoClient(connectionString);
            var server = client.GetServer();
            var database = server.GetDatabase("test");
            var collection = database.GetCollection<Entity>("entities");

            var cursor = collection.FindAll();

            foreach (Entity book in cursor)
            {
                string name = book.Name;
                string a = Alphabetize(name);
                string value;
                if (dictionary.TryGetValue(a, out value))//http://www.dotnetperls.com/anagram
                {
                    dictionary[a] = value + " " + name;
                }
                else
                {

                    dictionary.Add(a, name);

                }
            }

忽略它说“书”和“名字”的事实,我还没有改变它们。

SQL 服务器:

 connection.ConnectionString = ConnectionStrings.connectionString1;
            using (connection)
            using (SqlCommand command = new SqlCommand())
            {
                command.Connection = connection;
                command.CommandText = "SELECT Word FROM Dictionary";
                if (connection.State != ConnectionState.Open) connection.Open();
                using (SqlDataReader sqlReader = command.ExecuteReader())
                {
                    while (sqlReader.Read())
                    {
                        string line = sqlReader.GetString(0);

                        // Alphabetize the line for the key
                        // Then add to the value string
                        string a = Alphabetize(line);
                        string value;
                        if (dictionary.TryGetValue(a, out value))//http://www.dotnetperls.com/anagram
                        {
                            dictionary[a] = value + " " + line;
                        }
                        else
                        {

                            dictionary.Add(a, line);

                        }

                    }

} }

每次 SQL 服务器的执行速度都比 MongoDB 快,而文本文件方法的执行速度比两者都快。

然而,我确实注意到,对于 mongo,所有单词的插入都更快,但这不是我想要做的。

有没有更快的方法来循环遍历 mongo 中的集合?

查询特定单词的文本文件显然要慢得多,但 mongo 和 SQL 的性能差异并不太显着。0.0450026-ish 使用 mongo。使用 SQl 服务器通常更快 0.0480027-ish

我应该用这个 mongo 循环做一些不同的事情吗?它比 SQL 服务器慢 2 倍以上...

4

1 回答 1

0

SQL Server 和 MongoDB 都需要设置与客户端的网络连接、执行查询和序列化/反序列化结果。如果您不使用任何索引或执行更复杂的查询,这总是比从普通文件中读取要慢。对于数据库来说,它也是一个毫无意义的用例。对于 MongoDB,性能更差,因为它是一个无模式的数据库,它需要在结果中动态创建记录,而不是遵循固定的表模式。

于 2012-12-05T09:11:30.830 回答