保存 JSON 对象的 JavaScript/Node.js 最佳实践和检索特定值的最有效方法

标签 javascript arrays database object data-structures

我正在构建一个将存储大量数据的 Node.js 应用程序,因此我想提前计划并考虑我应该如何构建数据。

假设我要保存 500,000 个学生帐户信息:

       ID:  unique string,   // SID0001
 username:  string,          // moe_kanan
 password:  string,          // 123123
     Name:  string,          // Moe kanan
      Age:  int,             // 1 to 100
    grade:  string,          // A, B, C or D

现在,构建数据以获取特定学生帐户信息的最佳、最快和最有效的方法是什么?例如,如果学生想要登录,我们必须检查他们的凭据。

因此,如果我们将信息保存为一个学生数组,我们将不得不循环遍历该数组。如果我们有大量的人同时尝试登录,这会降低应用程序的速度吗?

我想出了两种不同的方法来做到这一点,但我不知道哪种方法更快更有效。请在您的回答中对此进行解释。


1。第一种方法

将它们存储为 JSON 对象,对象 key 将是唯一 ID - 在本例中是学生 ID。示例:

var database = {}; //NOTICE this is an object

database["SID0001"] = {
      "ID":       "SID0001", 
      "username": "moe_kanan", 
      "password": "123123", 
      "name":     "Moe Kanan", 
      "age":      99, 
      "grade":    "A"
 }

在这个方法中,我不必循环。我可以通过这样做来获取凭据:

var username = database["SID0001"].username;  //moe-kanan
var password = database["SID0001"].password;  //123123

2。第二种方法

var database = []; //NOTICE this is an array

database.push({
      "ID":       "SID0001", 
      "username": "moe_kanan", 
      "password": "123123", 
      "name":     "Moe Kanan", 
      "age":      99, 
      "grade":    "A"
 });

var getStudentInfo = (id) => {
    let obj = database.filter(student =>  student.ID == id)[0];   //NOTICE the [0]  
    return {"username": obj.username, "password": obj.password}
}

getStudentInfo("SID0001"); //{username: "moe_kanan", password: "123123"}

请随时添加更好的解决方案:)我真的很感激!

注意:请记住,我暂时不想使用数据库,但将来我会使用 MongoDB。

最佳答案

很明显,使用对象的第一种方法比使用数组更快/更有效。

使用 HashMap 的时间复杂度为 O(1),而使用数组的时间复杂度为 O(n)

正如其他人所指出的,唯一真正的答案是您应该使用数据库。

关于保存 JSON 对象的 JavaScript/Node.js 最佳实践和检索特定值的最有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47046617/

相关文章:

javascript - 通过鼠标滚轮从服务器提取数据?

java - Char[] 到 Byte[] 用于在 web (java) 中优化输出

Java编程: Storing Objects and Arrays into a file

mysql - 如何在需要连接的两个表中查询特定类型的电影名称?

php - MySQL(和 PHP)中实体的修订跟踪框架?

javascript - iPhone/iOS 6/Mobile Safari : Is there a way to detect "in browser fullscreen" mode? Android 兼容性?

javascript - BrowserSync 与导致错误的分析脚本

c - 在c中移动数组元素,有没有更好的选择

mysql - 如何在mysql表中找到一定数量的重复项?

javascript - 在 Javascript 中组合两个正则表达式