0

私は、テレビの録画をスケジュールするための PVR バックエンドに取り組んでおり、関連するすべての情報を含む単純なデータベースを保持する最良の方法を見つけようとしています。私は怠け者のプロトタイプ (以下を参照) をまとめましたが、巨大な配列を静的に割り当ててから、それらのオブジェクトの RAM の内容をディスクにダンプしてストレージに保存したくはありません。

次の怠惰な/悪い習慣のプロトタイプを考えると、私の最良の選択肢は何ですか? 経験豊富なプログラマーは、このようなことをどのように選択するでしょうか? toString/fromString 関数を使用せずにすべてを行うとしたら、どうすればよいでしょうか?

struct Recording{
    Date date;
    int channel;
    int length; //length in hours, minutes, or seconds
    bool is_interlaced; //if true, denotes that the episode is interlaced
    bool done; //if true, denotes that the episode has been recorded
    bool record_successful; //Currently unused
};

struct TV_Episode{
    struct Recording recording;
    char title[128]; //Episode Title
    char season; //Season number
    char episode; //Episode number
};

struct TV_Show{
    char name[64]; //TV Show name
    char numepisodes; //The number of episodes in the array
    struct TV_Episode episodes[100]; //Array containing airings of a TV show
};

struct Movie{
    struct Recording recording;
    char title[128]; //Movie Title, optionally including the year in brackets
};

struct Recordings_DB{ /*
    * Obviously these types can be done away with using inheritance
    * and the Recordings_DB type can be done away with using a vector.
    * They are just here to illustrate the concept.
    */
    struct TV_Show shows[20];
    struct Movie movies[20];
};
4

3 に答える 3

0

配列を静的に割り当てたくない場合は、 and を使用std::stringしてみませんstd::vectorか? 正しいサイズに動的に割り当てられ、最大サイズに制限はありません。ウィンウィンです。

charまた、整数値には使用しないでください。そのようなペニーピンチは不要です。それはあなたを噛むために戻ってくるだけです。Y2Kを覚えていますか?信じられないかもしれませんが、最新のコンピューターには大量のメモリとディスク容量があります。多くの場合、パディングのために、実際にはメモリを節約していません。

于 2013-10-05T07:48:24.263 に答える
0

独自のシリアル化コード (tostring/fromstring) を作成するか、ライブラリを採用する必要があるため、おそらく少し面倒です。独自のものを作成する場合は、構造体の 1 つにフィールドを追加するが、古い形式で読み取れるようにしたい場合を必ず考えてください。事前に計画を立てることは、その問題に大いに役立ちます。

検討できる 2 つの選択肢は、Google のプロトコル バッファ ライブラリ (構造体の代わりにプロトコル バッファを定義し、最上位の RecordingsDB をシリアル化するだけです) または SQLite (フィールドに入力する基本的な SQL を記述する必要がありますが、また、インデックス作成とトランザクションも取得します)。データベースのレコード数が数千を超えることがない場合は、プロトコル バッファをお勧めします。SQL ではあまりメリットが得られないからです。どちらも適度にコンパクトでシンプルなライブラリであり、十分にサポートされています。

于 2013-10-05T12:59:29.700 に答える