Matriz de objetos vs objeto anidado?

Tengo una pregunta de programación muy básica que espero que pueda arrojar una luz.

Estoy trabajando en muchos objetos en este momento y me preguntaba si es mejor buscar contenido dentro de una matriz de objetos o dentro de un objeto anidado.

Por ejemplo, puedo almacenar la misma muestra de datos de las siguientes dos maneras:

data1 = [ 
{ "id":1, "key1: "value1", "key2:"value2"},
{ "id":2, "key1: "value1", "key2:"value2"},
{ "id":3, "key1: "value1", "key2:"value2"},
{ "id":4, "key1: "value1", "key2:"value2"},
.....
]

y

data2 = {
"id_1": { "key1: "value1", "key2:"value2"},
"id_2": { "key1: "value1", "key2:"value2"},
"id_3": { "key1: "value1", "key2:"value2"},
"id_4": { "key1: "value1", "key2:"value2"},
.....
}

Ahora el requisito es obtener cierta propiedad de un objeto hijo. Y todo lo que sabemos es la identificación (y no el índice) asociada a ella.

Si tuviera que usar el método de matriz, tendría que usar bucles y filtros de matriz para acceder a cualquier contenido / valor en los objetos individuales. Este método parece bastante engorroso e iterar a través de cada objeto secundario me parece muy ineficiente. Sin embargo, cada vez que veo que los programadores experimentados implementan muestras de datos similares, todos parecen usar mucho los arreglos.

Si tuviera que usar el método de objeto anidado, todo lo que tengo que hacer es llamardata2.id_2.key2 para obtener ese valor específico.

¿Cuál es la forma recomendada de hacer las cosas? Jugaré con conjuntos de datos bastante grandes y, por lo tanto, ¿la opción tendrá un mejor rendimiento?

Respuestas a la pregunta(2)

Su respuesta a la pregunta