J'essaie de savoir si je peux utiliser protobuf-net pour stocker et récupérer la structure de données sérialisé suivantes:Protobuf Net et le stockage/récupération des blobs de données vers/depuis un fichier binaire
J'ai environ 200 000 objets de taille 16 octets (l'objet contient un long et deux valeurs de type flottant, 8 octets plus 2 * 4 octets) chaque jour que j'aime stocker dans un fichier binaire. Par exemple, je voudrais demander des objets entre le 1er avril 2012 et le 6 avril 2012, qui doivent être lus à partir du 1er avril, puis le 2 avril, le 6 avril. Une exigence est que l'accès doit être aléatoire, ce qui signifie, Le fichier peut contenir des données de 2010 à Juin 2012 mais je ne souhaite que récupérer des éléments entre le 1er avril et le 6 avril 2012 sans avoir à lire tous les éléments depuis le début.
Je stocke actuellement les données sous forme de tableaux d'octets contigus dans l'ordre de DateTimeTick mais sans tenir compte du début ou de la fin d'un nouveau jour. Si je pouvais utiliser protbuf-net pour diffuser les données en tant que "blobs" d'une journée entière comme IEnumerable, ce serait formidable. Est-ce possible? Je pensais stocker un IEnumerable ou List pour chaque jour sérialisé avec protobuf-net mais je ne suis pas sûr de savoir comment accéder aléatoirement à une liste particulière plus tard? Des idées ou des suggestions? Merci
Merci pour vos commentaires. Si je devais stocker chaque jour dans un fichier séparé recommanderiez-vous de stocker les objets en tant que List ou IEnumerable sérialisé avec protobuf-net ou serait-il plus rapide de simplement stocker et récupérer tous les tableaux d'octets bruts pour un jour donné? –
@Freddy si vous avez quelque chose qui fonctionne, je m'en tiendrai à cela. protobuf-net est efficace, mais doit encore faire un certain niveau de traitement car le format est plus structuré et flexible. Il souhaiterait également ajouter des en-têtes (très laconiques, c'est-à-dire 1 octet par champ généralement) dans la sortie. Dans le cas que vous décrivez, où les données sont très simples (c'est-à-dire non structurées, avec des données imbriquées/internes et avec une disposition prévisible), je ne suis pas sûr que protobuf-net va vous acheter quelque chose. Là où il excelle gère la sérialisation plus générale des objets, qui peut être complexe, et qui doit être ... –
... extensible au fil du temps afin que les gens puissent facilement "versionner" les données (à un moment donné un nouveau champ est ajouté), ou en manipulant des arbres d'objets complexes (A a une liste de B, chacun ayant un C et un D, et divers autres champs à tous les niveaux). –