- PR -

SQL Server2005 配列データの格納方法

投稿者投稿内容
rain
ぬし
会議室デビュー日: 2006/10/19
投稿数: 549
投稿日時: 2009-02-18 10:35
引用:

あかりさんの書き込み (2009-02-18 10:27) より:

>BynaryFormatter を使わず、BitConverter.GetBytes() メソッドを使うなどして、自分で1200バイトのバイト列を組み立てるのが手っ取り早いのでは?
試してみようと思うのですが、1項目ずつ、byte型に変換し、結合していくということですよね?
byte同士の結合はどうすればできるのでしょうか?


私だったらこうします(ただし VB2005 以降)
・List(Of Byte) 型の変数を用意する。
・List(Of Byte).AddRange() メソッドで、バイト列を順に追加していく。
・追加し終わったら、List(Of Byte).ToArray() メソッドで配列に変換する。

※Add() → AddRange() へ修正

[ メッセージ編集済み 編集者: rain 編集日時 2009-02-18 10:36 ]
あかり
常連さん
会議室デビュー日: 2009/02/18
投稿数: 38
投稿日時: 2009-02-18 10:51
rain様、回答ありがとうございます。

>私だったらこうします(ただし VB2005 以降)
・List(Of Byte) 型の変数を用意する。
・List(Of Byte).AddRange() メソッドで、バイト列を順に追加していく。
・追加し終わったら、List(Of Byte).ToArray() メソッドで配列に変換する。

動作を確認することができましたありがとうございます。
バイト配列からショート型へ展開するにはどうすればよろしいでしょうか?
rain
ぬし
会議室デビュー日: 2006/10/19
投稿数: 549
投稿日時: 2009-02-18 10:56
BitConverter.ToInt16 メソッド
甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 2009-02-18 11:48
引用:

あかりさんの書き込み (2009-02-18 10:27) より:
turutosiya様、rain様回答ありがとうございます。
>「正規化しない」とはシリアライズしてフィールドを一つにまとめることではありません。

概念スキーマ上、別テーブルにあえて分けないという意味で、正規化しないという表現を使用させていただきました。


あえて突っ込むと・・・
貴方の言っていること=別テーブルにわけない。
貴方のやっていること=別レコードにわけない。

ゆえに本当に大丈夫なのか?とみている人は思ってしまうのです。

引用:

正規化しないことでアクセス頻度を下げ、レスポンスの改善はかれる


それは、しばしば行われるよ。過度に正規化すると、レコードの結合が頻発したり、読み込むレコードがばらばらのブロックに分散したりして、速度低下につながることはある。そのためにあえて正規化しないということは多い。

引用:

>どう使うのかわからないのでなんとも。
少なくとも、個別の値に対して検索を行う用途には向かないでしょうね。
個別の値に対して検索は使用しないとのことでした。


検索もそうだけど、SQLによる集計処理もできなくなるからシリアライズしてバイナリデータとして保存するのは用途を把握していないと危険かと。セキュリティ上の都合で暗号化が必要だったり、画像のような元からバイナリなデータではよくやるけどさ。

あかり
常連さん
会議室デビュー日: 2009/02/18
投稿数: 38
投稿日時: 2009-02-18 12:03
rain様、甕星様回答ありがとうございます。

rain様
>BitConverter.ToInt16 メソッド
ありがとうございました、動作を確認することができました。
これで、1200byteで保存することができます。

甕星様
>貴方の言っていること=別テーブルにわけない。
貴方のやっていること=別レコードにわけない。

すいませんよくわからないです。

>検索もそうだけど、SQLによる集計処理もできなくなるからシリアライズしてバイナリデータとして保存するのは用途を把握していないと危険かと。セキュリティ上の都合で暗号化が必要だったり、画像のような元からバイナリなデータではよくやるけどさ。

担当者に確認してみます。
バイナリーデータとして保存しない場合は、主キーを外部キーとするテーブルを作成し、そのテーブルに保存していく方法しかないのでしょうか?
turutosiya
常連さん
会議室デビュー日: 2003/06/10
投稿数: 49
お住まい・勤務地: 東京都
投稿日時: 2009-02-18 12:40
引用:
バイナリーデータとして保存しない場合は、主キーを外部キーとするテーブルを作成し、そのテーブルに保存していく方法しかないのでしょうか?



そうする人のほうが多いと思います。
何が主キーで何が外部キーなのかは読みとれませんが。


今回の場合、処理速度向上が目的とのことですよね?
だとしても、オブジェクトのシリアライズにそれなりの時間を食います。


素直にテーブルに入れて、120件を一発で取る方がよいとおもいますよ

[ メッセージ編集済み 編集者: turutosiya 編集日時 2009-02-18 12:46 ]
あかり
常連さん
会議室デビュー日: 2009/02/18
投稿数: 38
投稿日時: 2009-02-18 18:15
turutosiya様回答ありがとうございます。

皆様のご指摘通りと思い、
担当者を説得して別テーブルに分けることになりました。

貴重なご意見を大変ありがとうございました。
BitConverterも別な処理に組み込み活用させていただきたいと思います、
本当に助かりました、ありがとうございました。

スキルアップ/キャリアアップ(JOB@IT)