質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

91.04%

  • C#

    5549questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

  • C++

    2860questions

    C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

  • Windows

    1211questions

    Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

  • OS

    177questions

    OS(オペレーティングシステム)は、システムソフトウェアの一種であり、一般的に、ハードウェアを直接的に管理・操作する最も中心的な機能を有するソフトウェアがオペレーティングシステムとして呼ばれます。

RAMを大量に使わず、SSD, USBメモリ(Flash), SDカードなどの書き換え回数を減らすには?

解決済

回答 7

投稿

  • 評価
  • クリップ 0
  • VIEW 684

anndonut

score 227

Windowsプログラミングについての質問です。データベースは通常インストールして使うものですが、インストールしなくてもデータに高速にアクセスできるWindowsソフトというのを検討しています。つまり、ネットブックでもUSBメモリの中に入っている実行ファイル(.exe)を開くことによってExcel等よりも高速にデータ入力、検索ができるソフトを作りたいということです。

さて、ネットブック、私が持っているのはHP Stream(Windows 10)ですが、これは64bit版WindowsのくせにRAMが2GBしか搭載されておらず、常にスワップ寸前の状態になっています。なので、上記ソフトもRAMを100MB以上消費したくないというニーズがあります。

また、USBメモリ等のFlashメモリはHDDよりも書き換え回数が少なく、頻繁にUSBメモリのファイルをライトするとUSBメモリ全体が使えなくなるという現象が発生します。なので、データベースの仕組みを実現し、かつ、RAMを使わないとなるとUSBメモリにデータを書いてやる必要があるわけですが、Flashメモリの仕組み上都合が悪くなるようなIOアクセスをしないようにライトしてやらないといけない訳です。

私の現状の案では、例えばデータベースで100MB程のデータを扱うがデータベースのファイルとしては1GBのサイズにすると考えた時に、ファイルを「バイナリ書き込み+読み込み」モードでオープンし、リードはランダムに行い、ライトはリングバッファのように書き込んでやるということを考えています。なぜかというと、OS本の中に書いてあったと思うのですが、メモリ空間という概念があり、それはRAMやキャッシュメモリの内容をうまく差し替えてやる仕組みがあるので、それを使えばファイルアクセスも均等に行うことができるのではないかと考えたためです。

このようなプログラミングのご経験をお持ちの方がいらっしゃいましたらご教示頂ければと思います。なにせUSBメモリを潰して試験するのはお金がかかるものですので...よろしくお願いいたします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 7

+2

USBメモリ等のFlashメモリはHDDよりも書き換え回数が少なく、頻繁にUSBメモリのファイルをライトするとUSBメモリ全体が使えなくなるという現象が発生します。

いまどきのFlash SSDでは、ウェアレベリングといって、特定のセルばかりに負荷が偏らないように、コントローラーレベルで分散する機能を実装しています。

ネットブックでもUSBメモリの中に入っている実行ファイル(.exe)を開くことによってExcel等よりも高速にデータ入力、検索ができるソフトを作りたい

例えばデータベースで100MB程のデータを扱うがデータベースのファイルとしては1GBのサイズにする

それを特定の機器に実装するなど、売れる需要があるのなら話は別ですが、自分の時間を消費して必死で開発するよりは、マシンを高性能なものに買い替えて解決するほうが、合理的な選択だと思います(「ムーアの法則」として知られるように、マシンスペックは年々向上していきますので、汎用のツールについて「省資源で動く」ことに対するメリットは急速に薄れていきます)。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/12/27 20:51

    そうかもしれませんが、ぎりぎりスペックの機器というのは需要があるので今後も生産されていくと思います。それが3万から2万7千円になり、2万5千円になりというような話だと思います。だから、この課題に挑戦すること自体は興味深いのではないかと思います。

    キャンセル

  • 2017/12/27 21:09

    それとも、わざとアプリケーションでは主記憶を多く使ってRAMの一部をスワップさせた方が、うまく動作してくれるかもしれませんね。アプリケーションよりもOSの方がデバイスのことをよく知っているわけですから、OSでできることはOSにさせたほうがいいのかもしれませんね。ちなみに私のHP StreamのCドライブはSSD(32GB)です。新しいHP StreamはRAM 4GB, SSD 128GBなので私が持っているタイプの数段上を行っています。なのでmaisumakunさんのおっしゃっていることは結構当たっていると思います。

    キャンセル

+2

「書き換え回数を減らす=変更内容の永続化を後ろに倒す」ということは、それを管理しているシステム(OS、プログラム)が落ちたら変更内容をロストしますってことだけわかっていればいいと思う
1GB位の使用容量でいまどきのUSBメモリ(1000円位で購入できる16GBくらいですか)を書き潰すまで書こうと思ったら相当書き込まないといけないと思います

両者を天秤に掛けて、書き込まないことを試行錯誤するか、普通に使うかを判断されては?

あと100MB(想定で1GB)くらいならFirebaseの無償使用枠にもおさまったりするのでは?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/12/28 10:03

    Firebaseって安全なのかな。Cloudで、かつ、Googleスプレッドシートみたいに使いやすいメジャーなツールでないのでちょっと不安はあります。でも、スプレッドシートだと遅いとか検索機能をカスタマイズしたいといった場合には面白いかもしれませんね。ポータブルなXAMPPと天秤にかけられると思います。

    キャンセル

  • 2017/12/28 11:12

    ちょっ Firebaseがメジャーじゃないとか

    キャンセル

  • 2017/12/28 12:02

    ?? Googleスプレッドシートに比べてですよ?プロフェッショナルの間ではメジャーかもしれませんが、個人が使う時にはためらわれるとかいう意味合いです。

    キャンセル

checkベストアンサー

+1

結論から言うと、無理かと思います。
フラッシュメモリの制御はハードウェアレベルなので相当、個人、中小企業レベルでは難しいと思われますし、やるにしてもお金がかかります。

他の方も書いてますが、フラッシュメモリの寿命は書き込み回数で決まり、書き込みが偏らないようにハードウェア制御されています。安いUSBメモリはそういったものが考慮されていないのだと思いますが、SSDであれば現状はHDDと同レベル以上の寿命があるとされています。

ということで単にUSBメモリの寿命の問題、内蔵SSDやメモリが増設不可なのであれば、単純にSSDをUSB経由でつなけばいいのでは?

なおアプリケーションで使うサイズに対して、”できるだけ大きい容量のSSD”を使ったほうが長寿命になります。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/12/28 09:57

    そうですよね。普通に考えたら無理だと思いますよね。しかしそこを何とかした人の武勇伝が聞きたい訳なのですよ。

    キャンセル

  • 2017/12/30 17:09

    結局全てのマシンについて一般的な解を出すのが難しいので、一概にこうだとはいえないということなのだと思います。ただ、レンタルサーバー事業者など、大規模なストレージを管理している所は、「このハードウェアとこのデータベースソフトの組み合わせは相性がよい」とかいうような、ノウハウは持っていると思います。だから、よほどの機密情報でない限り、クラウド上で管理したほうが都合がよかったりするのかもしれません。結局紆余曲折してこの回答が正しいということに行きつきました。ご回答ありがとうございます。

    キャンセル

+1

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/12/27 21:49

    ほげほげ!?XAMPPってインストールしなくてもいいの?これ凄いですね。

    キャンセル

  • 2017/12/27 22:09

    すいません。とてもいいご回答だったのですが、このスレッドのタイトルが「書き込み回数を減らすには?」なので、もうしばらく回答を待ってみようと思います。

    キャンセル

0

後はWindows10の圧縮メモリ機能みたいに、メモリ上のデータを圧縮しておくぐらいしかないかと。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/12/28 10:04

    圧縮メモリ機能はWindows98くらいのときに使った記憶があるけど、もっさりしたように思ったのでちょっと躊躇しますね。

    キャンセル

0

ウェアレベリングの話が出ていて、私のほうでは詳細は分からないのですが、Flash系のハードウェアを触ったことがあります。その経験から話をさせてください。

Flashのイレース(erase)状態というのがあって、それを仮に1だったとします。で、Flashライトというのは0を書くことです。ライトはランダムにできますが、1をライトすることはできません。イレースは一括で大領域を1にします。書き込み回数で問題になるのは、ライト回数ではなく、イレース回数です。

例えば1000回イレースできる8GBのUSBメモリに100MBのデータをライトすることを考えます。ウェアレベリングの仕組みが無いと1000回しかライトすることができません。しかし、ウェアレベリングの仕組みがあると、1000*(8GB/100MB)=80000回ライトすることができます。

つまり、ウェアレベリングの仕組みがあると、ライトするデータ量が小さければ小さいほど書き込み回数が増えるわけです。これは分かりやすい特性だと思います。

しかし、データベースをUSBメモリに搭載することを考えた場合、通常のデータベースというのは即応性というのを重視するため、データの規模が大きくなればなるほどUSBメモリの寿命は短くなるものと思います。つまり、データベースは基本RAMで管理し、RAMが足りなくなったらストレージにスワップし、データベースの開始・停止時にはデータベースの内容をそのままストレージに書き込むものと考えるからです。

従って、既存のデータベースとは異なるファイルのデータ構造を考えないといけないのではないかと思いました。それはそれほど難しい課題ではないと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

-7

ごめんなさい。「え~!!!」、っと思われるかもしれませんが、Googleスプレッドシートが思い浮かびました。これならネットブックでもExcelを使わずにデータベース管理をすることができます。なので、しばらくGoogleスプレッドシートを使うと思います。

ただ、インストールしなくて済むデータベースソフトというのは需要があると思うので、そういうのをご教授頂ければ。あと、書き込み回数をどうやって減らすかということも技術的には非常に興味深いのであえて自分の答えをベストアンサーにしないでおきます。よろしくお願いいたします。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 91.04%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • C#

    5549questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

  • C++

    2860questions

    C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

  • Windows

    1211questions

    Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

  • OS

    177questions

    OS(オペレーティングシステム)は、システムソフトウェアの一種であり、一般的に、ハードウェアを直接的に管理・操作する最も中心的な機能を有するソフトウェアがオペレーティングシステムとして呼ばれます。

  • トップ
  • C#に関する質問
  • RAMを大量に使わず、SSD, USBメモリ(Flash), SDカードなどの書き換え回数を減らすには?