Pensando a través de DB tradicional a ETH

Estoy buscando una estructura de datos como esta:

[
  "data": {
    "id": 0,
    "hash" : "5feceb66ffc86f38d952786c6d696c79c2dbc239dd4e91b46729d73a27fb57e9",
    "owner" : 0,
    "status" : "allocated"
  },
  "data": {
    "id": 1,
    "hash" : "6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b",
    "owner" : null,
    "status" : "pending"
  },
  "data": {
    "id": 2,
    "hash" : "d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35",
    "owner" : 0
    "status" : "allocated"
  },
  "data": {
    "id": 3,
    "hash" : "4e07408562bedb8b60ce05c1decfe3ad16b72230967de01f640b7e4729b49fce",
    "owner" : 1
    "status" : "allocated"
  },
  "data": {
    "id": 4,
    "hash" : "4b227777d4dd1fc61c6f884f48641d02b4d121d3fd328cb08b5531fcacdabf8a",
    "owner" : null
    "status" : null
  }

]

Mi caso de uso tendría un gran valor de registros almacenados, desde 0 hasta muchos cuatrillones, registrando su propietario y estado.

Específicamente, me gustaría tener acceso a los siguientes tipos de consultas, escritas en SQL aquí (pero no es necesario, por supuesto, estar abierto a aprender cualquier otro idioma o paquete para la lógica de consulta):

SELECT * FROM dataset WHERE data.owner = 1;

SELECT * FROM dataset WHERE data.id = 4;

UPDATE dataset SET data.status = "pending" WHERE data.id = 4;

UPDATE dataset SET data.status = "allocated", data.owner = 1 WHERE data.id = 4 and data.status = "pending";

Me gustaría completar previamente los valores de los ID una vez fuera de la cadena y cargarlos todos a la vez, pero luego hacer cálculos como las declaraciones de ACTUALIZACIÓN por contrato en la cadena.

Mis preguntas muy novatas son:

  1. ¿Es ETH una buena opción para esto? Si no, ¿hay alguna más adecuada?
  2. ¿Cómo configuro este tipo de cosas cuando los datos son inmutables?
  3. Si tuvo que almacenar 10^1000s de registros de forma distribuida, pero quería algún tipo de control de aplicaciones sobre los metadatos como el anterior, así como una infraestructura de consulta para dividir campos, ¿cuál es una buena manera de hacerlo?
  4. ¿Cuál es una buena manera de manejar dentro y fuera de la cadena?

Nota al margen, escribiendo solo números enteros de 0...5500000000 = 55 GB, por lo que probablemente sea una cantidad costosa de datos.

Respuestas (2)

Debería pensar en usar un contrato inteligente con la estructura de datos de almacenamiento de mapas de las estructuras. Primero, defina una estructura que represente su objeto

struct Data {
  string hash,
  uint owner,
  string status
} 

Luego puede definir un mapeo que mapee el ID de datos único a sus valores, por ejemplo:

mapping(uint=>Data) idTodataMapping;
uint[] allIds;

Estos campos serán replicados por todos los nodos y le brindan la distribución de datos que está buscando. Y allIdsse puede usar para almacenar todas las claves para el mapeo, de modo que pueda recorrer el mapeo más tarde. Tenga en cuenta que puede omitir esta matriz y reemplazarla con una simple uint countsi las identificaciones son incrementales.

Ahora, si desea manipular datos, hasta ahora no hay nada como las consultas SQL en Solidity, pero puede lograr lo que desea al recorrer su archivo idTodataMapping. Por ejemplo:

for (uint i = 0; i < allIds.length; i++) {
    if (idTodataMapping[i].owner == "1") {
        idTodataMapping[i].status = "allocated";
    }
}

¿Es ETH una buena opción para esto? Si no, ¿hay alguna más adecuada?

No, almacenar datos en ethereum es costoso. almacenar un byte de datos en ethereum cuesta 68gas. Al precio actual de la gasolina, esto es 0,043 USD por Kbyte, es decir, alrededor de 45000 USD por GB.

Guardar los datos en la cadena de bloques no es una opción.

Jaime

¡GUAU! Eso es más de lo que esperaba
¿Puedo preguntar cómo calculaste esto? Estoy buscando aquí: ethgasstation.info , pero ¿cuál es la tarifa utilizada para traducir el precio del gas de 4 Gwei en almacenamiento de Kbyte?
El precio por byte es 68 gas y 1kbyte es 1024 bytes entonces 1kbyte_cost = 1024*68*gasprice
68 gasolina por byte está codificada en la especificación, ¿y es el precio de la gasolina lo que varía?
sí, puede encontrar esto en el apéndice G del papel amarillo