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

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

新規登録して質問してみよう
ただいま回答率
85.48%
C#

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

OS

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

Windows

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

C++

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

Q&A

解決済

7回答

714閲覧

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

anndonut

総合スコア667

C#

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

OS

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

Windows

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

C++

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

0グッド

1クリップ

投稿2017/12/27 10:36

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メモリを潰して試験するのはお金がかかるものですので...よろしくお願いいたします。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答7

0

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

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

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

投稿2017/12/27 21:32

dojikko

総合スコア3939

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

anndonut

2017/12/28 01:03

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

2017/12/28 02:12

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

2017/12/28 03:02

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

0

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

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

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

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

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

投稿2017/12/27 11:09

maisumakun

総合スコア145183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

anndonut

2017/12/27 11:51

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

2017/12/27 12:09

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

0

ベストアンサー

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

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

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

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

投稿2017/12/27 20:20

CodeLab

総合スコア1939

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

anndonut

2017/12/28 00:57

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

2017/12/30 08:09

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

anndonut

2017/12/27 12:49

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

2017/12/27 13:09

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

0

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

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

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

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

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

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

投稿2017/12/29 00:49

anndonut

総合スコア667

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

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

投稿2017/12/28 00:29

Kunihiro_Narita

総合スコア472

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

anndonut

2017/12/28 01:04

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

0

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

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

投稿2017/12/27 12:25

anndonut

総合スコア667

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問