【M言語】キャシエ・CACHE【MUMPS】
医療、金融、物流、製造でいまだに活躍! 古参も新参者も、さー語ってくらっしゃい。 だったら「MUMPS」は触りたくない、って書けばいいのにねぇ。 厨房? > MUMPSって調べてみたけど、(…中略…)古すぎてちょっと触りたくないな。 って書いたんだけど、何かおかしかった? >>47 あんたのお勧めはなんだ? たこな仕様ってなんだ? 古すぎるなら 古いから使わなくていいと思うものは使わなくていい 単なる食わず嫌いに過ぎない。 古いから悪いものばかりではない!! Mumpsは古いがSQLよりも速く使いやすい。 SQLは単なる巨大なエクセルシートで検索ができるだけの データベースにすぎない。 複雑なエクセルシートを検索するなら、スクリプトが複雑になる。 なので、マスターにおいておけば済むような情報でも、詳細情報に書き込み れーコードを巨大化させている。新しく好い物なんだろうか?? また、vbからSQL情報を取得するには、VBのレコード定義 スクリプト作成、スクリプトのコール、取得されたレコードの読み込み これだけの手順が最低でも必要。Cacheなら、VISM.OCXのプロパティ で十分対応できる。複雑なDB検索が必要ならMUMPSロジックを書けば対応できる。 またサブルーチンレベルでの変数と書かれているが、実際はMUMPSでは出来るが 正解。 Newコマンドと言われるコマンドがある。 正直、MUMPSを使用していて、このコマンドは使う人は使うが、 NEWコマンド嫌いな人は使わない。 MUMPSは1960年代からある言語だから、今のWindows始まってからpc始めた 人々には難しいかもしれない。 Mumpsを使いこなすと、SQLなんて使えなくなる。 Mumpsは人間の脳の記憶に近いらしいから、人類であれば使いやすいのではと思う >MUMPSは1960年代からある言語だから、今のWindows始まってからpc始めた 人々には難しいかもしれない。 そういう人にはぜひCacheObjectScriptを。 いわゆる構造化プログラミングにも対応した 拡張M言語ともいえます。 クラスメソッドならVBライクなCacheBASICもあるし。 >Mumpsを使いこなすと、SQLなんて使えなくなる。 >Mumpsは人間の脳の記憶に近いらしいから、人類であれば使いやすいのではと思う これはMUMPSの肝である「グローバル」のことを言っているのだと 推測します。 いわゆる「永続化できる連想多次元配列」こそMUMPSをここまで 生き延びさせてきた要因かもしれない。 バリバリのプログラマなんだけど、RDB/SQLの考え方やその デメリットに辟易してる人なら、直感的に気に入るはず。 そんなによいものなら、なんで日本市場ではニッチなんだろう、 という疑問がある人は、吉田さんの本を読むべし。 いまだに階層型DBをマンセーする香具師がいるとは驚きだな。 そういう議論は80年代で終わったかと思ったが。 Cacheは何故隠されていたか ■速すぎる.. HWメーカーが支持しない 例えば、RDBなら1億円のマシンが売れるが、Cacheでは1000万円のマシンしか売れない ■日本企業がすべて開発販売に失敗 1980年頃O、T、M、P、H、(N)、D MUMPSはダメだ.. ネガティブキャンペーン ■ユーザーは成功しすぎて話したがらない 競合他社ではRDBで40億のシステムを、自社では8億で開発した… > 57 よく調べもしないでRDB派のFUDのノリそのままでくるとは 驚きだな。ていうか笑えるな。 いわゆるCOBOL方面の階層化DBとデータの持ち方が ちがうからな。 自分で試してから批判したほうがいいと思うぞ。 >■速すぎる.. HWメーカーが支持しない ちょっと前だと当てはまる構図ですね。日本のソフトウェアが 欧米製に完敗し、プラットフォームビジネスに切り替え。 ハード・ソフト両方売っているSIerはシステム開発はおまけで ハードで利益を出す。 オープンソースがはやり、Linuxがのさばり、利益率が高い RISC系オープンサーバが売れなくなって、安いIA/Linuxに 路線変更。今の頼みの綱はサポートサービスによる収益。 Cache'はハードの性能をあますとこなく生かすので、 ユーザのコストメリットは高い。 >■日本企業がすべて開発販売に失敗 「F」も入れといて。でも、最近は運用実績からみなおされてきて 既存のRDBリプレースならずとも分析系などで人気がでてきている。 >■ユーザーは成功しすぎて話したがらない おれも客の巨大データつかって、SQLアクセスのみ だったけどOracleとの性能比較したらびっくりしたよ。 そのときはRDB/SQLしか知らなかったから、 MUMPSグローバルの特性をISJにレクチャーしてもらって ダイレクトアクセスに処理を書き換えたら感動物だった。 いちおうDBA15年選手でOracleMasterも持っているので Oracleのチューニングは死ぬほどしたけど、勝てなかった。 データのretrieve以外もはやいのかな? セッションいっぱいで更新したらだめだめとかない? データファイル壊れても完全リカバリとかできる? 安全装置がないから早いですってのは嫌だYo > データのretrieve以外もはやいのかな? > セッションいっぱいで更新したらだめだめとかない? セッションいっぱいといっているのは、 サーバマシンリソースの限界のことを言ってる? 何の限界をさしてる? あと、セッションいっぱいになったがために 問題になった実例ケースを想定して話しているなら、 その実例を起こした製品はなんだ? それって、DB製品自体の問題だけじゃなくて、インフラや 消費リソースの見積もりが極度に悪いとかの場合もあるからな。 あ、あと、Oracleなんかだと負荷高騰による障害パッチが サポートを[買えず|買わず]に運用している環境にあたって なく、サポート情報も知りえないから障害なのか仕様なのか すら判別できないという悲惨なケースもあったなあ。 > データファイル壊れても完全リカバリとかできる? 当然。オンラインバックアップも可能。 > 安全装置がないから早いですってのは嫌だYo ああ、InnoDBがなかったころのMySQLみたいのね。 更新ログもってなかったらそりゃ早いだろ、と。 ちゃんと更新ログもってるし、もし速さだけを追求したい (テンポラリ作業用とか)トランザクションに対して Oracle の NOLOGGING のような機能もあるよ。 更新ログ転送してOracle DataGuardのようなリモートサーバ へのDB複製(シャドウイング)もできるしね。 >>63 >>64 MUMPSはダメだ.. ネガティブキャンペーン??? SQLこそ、くそDBである。早くなくなっちまえ。 ユーザーからみれば、安くて安定したシステムを希望する。 SQLエンジニアは、プログラムがややこしいのです、 時間がかかります。なので、コストが高くなりますで、 エンジニアっぽい能書きたれるけど、実際はSQLしか しらんから他のDBに手を出すのも今更、怖いで勉強もしない。 そこがいかん!!。 なんでも、キモイの言葉で済ます低脳な発言はやめろ。 言葉知らずども!! MUMPS,CACHEを知り尽くして、反論してみろ。 MUMPSって、DECのミニコンとかで動いてたヤツ? MUMPSの多次元連想配列って、どう使うのがセオリーなの? 「M(MUMPS)メモ帳」っていうページを見つけたんだけど、 1レコードをひとつの文字列としてまとめて変数に格納する みたいなテクニックだった。 例えばこのスレの>>1 を^DATというグローバルに入れる場合は ↓のような感じ。 ^DAT("db",1108952588,1)="2005;02;21;21;11;08;医療、金融、物流、製造でいまだに活躍!\n古参も新参者も、さー語ってくらっしゃい。" 素人考えでは、 ^DAT("db","Board Name")="データベース板" ^DAT("db",1108952588,"Thread Name")="【M言語】キャシエ・CACHE【MUMPS】" ^DAT("db",1108952588,1,"Year")=2005 ^DAT("db",1108952588,1,"Month")=2 ^DAT("db",1108952588,1,"Date")=21 ^DAT("db",1108952588,1,"hour")=11 ^DAT("db",1108952588,1,"minuit")=23 ^DAT("db",1108952588,1,"second")=8 ^DAT("db",1108952588,1,"content")="医療、金融、物流、製造でいまだに活躍!<br>古参も新参者も、さー語ってくらっしゃい。" こんなツリーを作ってしまいそうなんだけど。 効率が悪くなるからダメ? あ、名前とメアドとのフィールドを忘れてた。 ^DAT("db",1108952588,1)="1;sage;2005;02;21;21;11;08;医療、金融、物流、製造でいまだに活躍!\n古参も新参者も、さー語ってくらっしゃい。" こうですね。 YahooBB219023164105.bbtec.net 荒らし常習犯↑↑ > 65 俺は製品の批判はするけど、RDB理論とSQL自体は批判しない。 普通のファイルアクセスだって、大量データの全なめ用途 だけなら最速の場合もある。 適用ゾーンと使い方を間違えずに、問題にフィットする データ操作を行えばいいだけ。 中傷なんぞ勝手に言わせとけ。どうせプログラムしか 組んだことなくて、要件定義から運用保守までなぞ したこともないし苦労したこともだろうから。 > 67、67 建設的な質問サンクス 上の例だと、";" を区切りにしたPIECE構造はあくまでデータで、 このデータを検索するキーとしては("db",1108952588,1) =板、スレ、投稿番号の3つでよいという構成ならOKと いうことになるね。 キミが書いた例なら、そのあとの要素が規則的に続き、本文は データとして扱うなら ^DAT("db")="データベース板" ^DAT("db",1108952588")="【M言語】キャシエ・CACHE【MUMPS】" ^DAT("db",1108952588,1,2,21,11,23,8)="医療、金融、物流、製造でいまだに活躍!<br>古参も新参者も、さー語ってくらっしゃい。" ^DAT("db",1108952588,2,2,21,11,24,46)="データベース新たな選択肢 〜 略 〜 " ^DAT("db",1108952588,3,2,21,11,24,46)="お仕事ですか? 〜 略 〜 " の方が効率的。 要素確保の分効率が悪くなると思いがちだけど、 同じ要素位置の値は、そのままストレージに格納されるのでは なくて、その前の同じ要素構成の部分までは同じ、という 情報だけを持つので、このパターンだと、板とスレの要素値は 省略されてストレージに格納される。 この並びによって、実際の格納サイズも削減できるし、 RDBなら検索キーのカーディナリティ(多重度)が低い 場合でも、フルスキャンする量が減るので効果大 ソートは不要、ストアした時点で自動的に要素順に格納してくれる。 削除・更新したときのストレージの断片化も心配無用。 ストレージエンジンが自動デフラグしてくれる。 デフラグ負荷も実運用上ほとんど気にならない。 あくまでここまでは標準MUMPSのグローバルアクセス。 Cache’の拡張Mはまだいろいろある。スキーマも持たせたい 場合は、クラス定義をすることになる、ストレージには最終的に クラスに対応するグローバルにストアされるが、その構成が 異なる。その辺はマニュアルを見るべし。 https://www.intersystems.co.jp/support/csp/main.html https://www.intersystems.co.jp/support/csp/ggbl/ggbl.html https://www.intersystems.co.jp/support/csp/ggbl/ggbl_sqlobj.html UNIXでshell&Emacsべったりな生活を送っていた習性からかLinux版であっても Windows機上の「スタジオ」という統合環境からのオペレーションを強要されるのが なんとかならんもんかと思うのですが、その辺古くからのユーザさんはどうしている のでしょうか? 当方OracleのクライアントはSQL*Plusが最強だと信じて疑わないコマンドライン派です。 Cache'に興味はあるんですがWindowsが(ry >>62 ありがとうございます。 レコードの要素を文字列で持とうが添字で持とうが、 データを一直線に並べて(という表現が適切か分かりませんが) 保持するのがいいんですね。 あと、検索性についても知りたいのですが、2chの例で続けますと、 更なる要件として、スレのage/sageがあります。 板を表示するときには、各スレの最終投稿日時の降順が基本ですが、 スレごとの最終投稿日時を決める際に、メール覧に"sage"という文字列が 含まれている投稿は考慮しないというルールです。 この場合、投稿データの登録時に、メール覧に"sage"が含まれない場合に スレ別最終投稿日時インデックスを更新する、という処理になると思い ますが、そのインデックスをどう表現するのがいいのでしょうか。 あるいはもしかすると、>>70 の例の場合インデックス自体いらないのでしょうか。 ご教示ください。 >>72 M言語のグローバルについて グローバルに書き込んだ時点で、ノードごとにアスキーコード順に 書き込まれるようになっています。 >>70 のグローバルを下記の順でSetコマンドを実行した場合 Set ^DAT("db",1108952588,3,2,21,11,24,46)="お仕事ですか? 〜 略 〜 " Set ^DAT("db",1108952588,2,2,21,11,24,46)="データベース新たな選択肢 〜 略 〜 " Set ^DAT("db",1108952588,1,2,21,11,23,8)="医療、金融、物流、製造でいまだに活躍!<br>古参も新参者も、さー語ってくらっしゃい。" Set ^DAT("db",1108952588")="【M言語】キャシエ・CACHE【MUMPS】" Set ^DAT("db")="データベース板" 逆にグローバルをセットしても グローバルを参照した場合は、下記のように表示されます。 ^DAT("db")="データベース板" ^DAT("db",1108952588")="【M言語】キャシエ・CACHE【MUMPS】" ^DAT("db",1108952588,1,2,21,11,23,8)="医療、金融、物流、製造でいまだに活躍!<br>古参も新参者も、さー語ってくらっしゃい。" ^DAT("db",1108952588,2,2,21,11,24,46)="データベース新たな選択肢 〜 略 〜 " ^DAT("db",1108952588,3,2,21,11,24,46)="お仕事ですか? 〜 略 〜 " ノードで参照する場合であれば、インデックスは不要です。 キー値前ゼロの有無でダブルコーテーションの要不要が変わるのはやめてくれ〜 前ゼロキー値がソート順で後ろになるのはやめてくれ〜 コメント行入れるとネストがぶっちぎられるのはやめてくれ〜 ネスト内でNew付け忘れるとネスト抜けても変数が残るのはやめてくれ〜 ループのブレイクがフラグ変数使わないと書けないのはやめてくれ〜 ごめん。もうひとつ追加。 >ネスト内でNew付け忘れるとネスト抜けても変数が残るのはやめてくれ〜 でこのときネスト外に同名変数があると、 有無を言わさず上書きになるのはやめてくれ〜 >>74 >キー値前ゼロの有無でダブルコーテーションの要不要が変わるのはやめてくれ〜 "000005" 000005 の件ですね。 これは、ごめんなさい。あなたが、コンピュータそのものを理解していないだけです。 上記の"00005"は文字列として扱う、000005は数値として扱うなんです。 仕様としては理に適っています。 >前ゼロキー値がソート順で後ろになるのはやめてくれ〜 本件も、ソート順がAsciiコードである事を理解されていないからですね。 仕様としては正しいです。 >コメント行入れるとネストがぶっちぎられるのはやめてくれ〜 何を言おうとしているのかわからん >ネスト内でNew付け忘れるとネスト抜けても変数が残るのはやめてくれ〜 Newコマンド使わなきゃいいんじゃないの? >ループのブレイクがフラグ変数使わないと書けないのはやめてくれ〜 どこのMumpsを使用したの? M経験者と言われても、数ヶ月でしょうか?SQL(2次元DB)経験者ではとっつきにくいかも しれませんが。仕様を理解されて使うと 本当にいいDBですよ。 >>76 あーレスどうもです。 > >キー値前ゼロの有無でダブルコーテーションの要不要が変わるのはやめてくれ〜 > これは、ごめんなさい。あなたが、コンピュータそのものを理解していないだけです。 > 上記の"00005"は文字列として扱う、000005は数値として扱うなんです。 >仕様としては理に適っています。 理に適っていません。 「000005は数値として扱う」は厳密に言うと5として数値扱いになります。 そして555555は常に数値扱いとなります。"555555"と書いてもです。 つまりこの問題の本質は、固定桁数数値をキー値として扱う場合、 先頭がゼロかそうでないかで処理を分けなければいけないということです。 ○○コードとか○○区分とか、世の中固定桁数数値で扱わなきゃ いけないものが結構あるのですが。 # って書くと「常に前ゼロなしで扱えばいいのでは」という話になるのですが、 # それはそれで表示時の前ゼロ書式化/書式化解除が手間でしょう。 >>コメント行入れるとネストがぶっちぎられるのはやめてくれ〜 >何を言おうとしているのかわからん ↓こんな感じ。 D ;ネスト開始 .S n=1 ;ネストの中。こことか .;こことかにコメントは書けるが ;ここに書くとネストも終わってしまう .S n=n+1 ;この行は実行されない いちいちコメントアウトするときも(.の有無に)気ぃ遣わなきゃならんとは…。 >>ネスト内でNew付け忘れるとネスト抜けても変数が残るのはやめてくれ〜 > Newコマンド使わなきゃいいんじゃないの? 言い換えると「ローカル変数は使用禁止。構造化は諦めろ」ということですか? >>ループのブレイクがフラグ変数使わないと書けないのはやめてくれ〜 >どこのMumpsを使用したの? これは失礼。説明不足でした。ループ継続条件だけではなく breakもあるwhileループを想定しています。どう書くのがスマートですかね? >M経験者と言われても、数ヶ月でしょうか?SQL(2次元DB)経験者ではとっつきにくいかも >しれませんが。仕様を理解されて使うと >本当にいいDBですよ。 Cache'4で1〜2年ほど。VT200環境で動かす業務アプリでした。 きっとそれでは経験不足なのでしょうが、その上での感想は ・確かにDB自体の処理スピードは悪くない ・しかしMの言語仕様がロートルなので、生産性はまったくよくない。 ・変数スコープが変態的なので、特にデバッグでは確実に死ねる といったところ。構造化が中途半端にしか出来ないのは困りものですね。 Newの仕様に意義を見出すかどうかで、Cache'に対する印象が 分かれるかと思います。 やめてくれ〜シリーズにもうひとつ追加。 空白文字の数が一つか二つかに、文法的意味を持たせるのはやめてくれ〜 前ゼロの件ですが、0005も5もMumpsでは5です。 Mumpsで0005として扱いたければ、$E(10000+5,2,5) と書けば0005と表示されます。 確かに世の中では、固定数値で扱う事は多々とありますね。 Mumpsでは無駄なデータ情報は持たないが原則で作成するので 他のPic x(20) とか 8桁固定とか使われるDBではそのように0詰め とかしてDB登録しなければいけないですね。 Do<スペース><スペース>の件ですね。 コマンドの仕様はご存知ですか? Mumpsの基本プログラムは昔のBasicと同様上から下の行へしか行かないGoto,Quitなど 特殊な場合を除き。 Do<スペース><スペース>は、このコマンドの次の行以降で"."で始まる行を飛び先 として扱い、"."で区切られた行がなくなればそのとび先は終了となっています。 なので、"."のない行があるからとび先は終了で正しいのです。 >>いちいちコメントアウトするときも(.の有無に)気ぃ遣わなきゃならんとは…。 それは、当然気を使わなければいけませんね。 Newコマンドの件ですが、同じ変数名を、あるサブルーチンで使用する場合 などは有効と思えますが、重要な変数名であれば、いたるところで変更される 事のないように変数を利用するのがいいと思います。 よく、構造化構造化と頻りに言葉に出されるエンジニアさんがいますが、 それが、絶対正しいのでしょうか?構造化して便利に利用できるのもいいですが それにより、プログラム変更が難しくなり、仕様変更に耐えれないプログラム になるなら、古典的なプログラムでもいいと思います。エンドユーザーから 見れば、プログラム内容ははっきりどうでもいい話なんです。それより、完璧な 仕様で動作してくれればいいのです。エンジニアが、頻りに構造化構造化と言われても 彼らの一人よがりでしかありません。 breakもあるwhileループ どんなのを想定されていますが、VBなどで書いてみてもらえれば書きますが M言語の仕様自体は確かに古いです。おっしゃる通りだと思いますが、でもそれで 十分機能は果たしています。最新の言語のようにコマンドが多い方がいいですか? その文コマンドを覚えなければいけませんよ。 Mumpsは基本的にa-z,$a-$z,Za-Zzなどアルファベットまたは$付き,Z関数で構成 されていて、コマンドは少なく仕様は世界基準も整備されている、新興言語のように バージョン違えば、コマンドも違うなんて事にはなりにくいのです。 生産性がよくない事は全くをもってありません。 コマンドを知らないプログラマが言う言い訳に過ぎません。 空白文字が1文字2文字で文法が変わると言うのは、それはそれに意味があるからです。 空白文字を1つであなたは、プログラムを書いたプログラマの意思を判断できますか? 仕様は仕様なんだから、それに対応できる理解力が必要です。なので、Mumpsに抵抗を 感じているんではないでしょうか? >>79 話のすりかえもはなはだしいな >エンドユーザーから >見れば、プログラム内容ははっきりどうでもいい話なんです。それより、完璧な >仕様で動作してくれればいいのです。エンジニアが、頻りに構造化構造化と言われても >彼らの一人よがりでしかありません。 こんなこと書いといて、あとはひたすらMumpsの擁護かよ。 遅ればせながら>>77 最後の一分の誤記を訂正致します。orz 誤: Newの仕様に意義を見出すかどうかで、Cache'に対する印象が 分かれるかと思います。 正: Newの使用に意義を見出すかどうかで、Mに対する印象が 分かれるかと思います。 >>79 さんは「意義を見出さない」方のようですね。 >確かに世の中では、固定数値で扱う事は多々とありますね。 数列をあらわす項目は文字列型、数量をあらわす項目は数値型、 というように使い分けられるのがベストですが、Mでは言語仕様上 先頭がゼロなら常に文字列型(但し先頭に"+"をつければ前ゼロを除去し 数値型にキャストしたことになる)、そうでなければ常に数値型 という扱いになってしまうようです。 結局、「固定桁数数値という要件に対する解決は、Mにはない」 という解釈でよいのですかね。どのように解決しているのか 事例を出していただけるとむしろありがたいのですが。 >>いちいちコメントアウトするときも(.の有無に)気ぃ遣わなきゃならんとは…。 >それは、当然気を使わなければいけませんね。 "."を評価する以前に、コメント行の除去が行われるよう 文法解析仕様が組まれていれば、気を遣う必要すらないのですが。 「当然」なのではなく「理不尽な仕様」と考えます。 >Newコマンドの件ですが、同じ変数名を、あるサブルーチンで使用する場合 >などは有効と思えますが、重要な変数名であれば、いたるところで変更される >事のないように変数を利用するのがいいと思います。 「重要な変数」が引き立つのは、「重要でない変数」があるからです。 この「重要でない変数」の寿命・名前の有効範囲をサブルーチン内に 閉じ込めることがNew(というよりローカル変数)の真骨頂なのです。 (MではNew宣言した変数でも同名での読み書きが下位ネストで可能なので、 他言語で言うところのローカル変数とはちょっと違う) グローバル変数の読み書きは要注意というのは確かにその通りですが、 ローカル変数にも注意を要求されるのは組む側としては負担の増加です。 >よく、構造化構造化と頻りに言葉に出されるエンジニアさんがいますが、 >それが、絶対正しいのでしょうか?構造化して便利に利用できるのもいいですが >それにより、プログラム変更が難しくなり、仕様変更に耐えれないプログラム >になるなら、古典的なプログラムでもいいと思います。エンドユーザーから これはとんだFUDですね。この文脈では 「構造化(プログラミング)するとプログラム変更が難しくなり、 仕様変更に耐えられないプログラムになる」 というように読み取れますが、その根拠は何ですか? 逆に古典的なプログラムだと、そんなことはありえないんですか? 構造化/非構造化それぞれについて、具体例を挙げていただけませんか? 私の経験では「構造化プログラミングによりプログラムの見通しはよくなり 製造時の気遣いが減る分生産性は上がる。プログラム構造にハマれば プログラム変更時に当該部分を差し替えるだけですむので、 仕様変更に耐えるチャンスは増える」なのですが。 長くなったので次へ。 >breakもあるwhileループ >どんなのを想定されていますが、VBなどで書いてみてもらえれば書きますが VBだと、Exit Do/Exit Forにあたりますね。 Do While i < 10 If i = j Then Exit Do i = i + 1 Loop # 図らずもcontinueはあるんだな…。 >M言語の仕様自体は確かに古いです。おっしゃる通りだと思いますが、でもそれで >十分機能は果たしています。最新の言語のようにコマンドが多い方がいいですか? >その文コマンドを覚えなければいけませんよ。 これまたFUDですね。CもJavaもC#も予約語の数は決して多くはないですよ。 その分ライブラリが多いのですが、それは適而リファレンスを見ればよい話です。 予約語分を網羅すれば制御構造の文法は分かるのだから、 むしろ制御構造と機能を分けた、洗練されたやり方だと思います。 逆にライブラリを含めた上でコマンドの少なさを誇られても、 それは即ち実現できる機能の貧弱さを示すだけなのですが…。 >Mumpsは基本的にa-z,$a-$z,Za-Zzなどアルファベットまたは$付き,Z関数で構成 >されていて、コマンドは少なく仕様は世界基準も整備されている、新興言語のように >バージョン違えば、コマンドも違うなんて事にはなりにくいのです。 >生産性がよくない事は全くをもってありません。 >コマンドを知らないプログラマが言う言い訳に過ぎません。 ここで言われている生産性とは、単に習得の容易さのことであり、 私が考えている生産性とは意味が違います。私が考える生産性とは 「文法は一通り習得したその上で、如何に気遣いなく製造・デバッグが出来るか」 です。前述の通り、前ゼロの有無を考慮したコーディングが必要だったり、 コメントアウトの際ネストに留意する必要があったり、 うっかりNewを付け忘れてもコンパイルエラーにならなかったり、と どうも「他言語ではしなくてもいい苦労を強いられている」 ように思えてなりません。やはり生産性はよくないと考えますね。 >空白文字が1文字2文字で文法が変わると言うのは、それはそれに意味があるからです。 >空白文字を1つであなたは、プログラムを書いたプログラマの意思を判断できますか? >仕様は仕様なんだから、それに対応できる理解力が必要です。なので、Mumpsに抵抗を >感じているんではないでしょうか? 私もいろいろな言語をやってきましたが、空白文字を区切り文字としてのみではなく その個数にまで意味を持たせる言語はMが初めてでした。 他言語では空白文字がいくつあっても同じ意味合いでしたから。 そんなMの変態的文法に抵抗を感じていることは、否定しません。 えーと…、ところでこれ(>>79 )、釣りじゃないんですよね。 >固定桁数数値という要件に対する解決は、Mにはない データの型としては、Mには文字列しかありませんので、 プログラムでどうにかするだけ。 Cacheは知らんが。 >データの型としては、Mには文字列しかありませんので、 微妙に不正確な気が。いや感覚的には分かるけど。 ・変数に型はない ・文字列扱い/数値扱いどちらで評価されるかは、格納値に依存する 厳密には↑では? >プログラムでどうにかするだけ。 ないものねだりなのは分かってますが、結局組む人が知恵使って どうにかして正しく動作するようにしないといけないのね。 固定桁数数値使用時の「定石」みたいなのは 確立されていないんでしょうか。 >・変数に型はない >・文字列扱い/数値扱いどちらで評価されるかは、格納値に依存する 同意。 でもその為にパタンマッチングが存在する。 いちいちそうしなければならないのか、という気持ちもわかるけど 言語の仕様で対応されていないならMに限らず多かれ少なかれ 他の言語でも知恵使ってプログラムで対応してるでしょ? >>85 > Mに限らず多かれ少なかれ ダウト。 多いと少ないじゃ天と地の差だろう。 DSMから始まりVMS、SP−MUMPS,U−MUMPS、キャシエと M言語を使い始めて約20年。その間、メジャーなDBとは一通り出会いまし たが。。。可変長の利便性は離れがたいものがあり、今後もM言語をメインに 使用続ける事になると思います。 キャシエも可変長データ扱うけど、 容量の大きなグローバルをキルしてもcache.datがHDD上に占める サイズはキルする前のまま…グローバルが大きくなればそれだけ cache.datも大きくなるのにグローバルをキルしても小さくならないんじゃぁ 可変長なんだか固定長なんだか…中途半端だとおもう。 >>73 スレッドフロート方式の掲示板の ・書き込みが新しい順にスレ表示 ・スレ内容は最新X件を表示 ・ただしメール欄が "sage" のものは考慮外 という表示についての indexing を質問したかったんですが… >>71 Windows機上の「スタジオ」という統合環境からのオペレーションを強要されるのが なんとかならんもんかと思うのですが、その辺古くからのユーザさんはどうしている のでしょうか? 私の隣の彼は、Cache ObjectScriptのプログラムはMIFESで書いてますね。 私もデバッグはターミナル(つまりコマンドライン)でやってます (^^ >>84 ないものねだりなのは分かってますが、結局組む人が知恵使って どうにかして正しく動作するようにしないといけないのね。 固定桁数数値使用時の「定石」みたいなのは確立されていないんでしょうか。 何しろ教科書も少ないからなあ。皆さん自分の工夫でこなしているんでしょうね。 ちなみに、Cacheなら固定桁数数値をDataTypeで定義してしまえばOKでしょう。 , -'"´  ̄`丶、_ ,.∩ `ヽ 〃∪'´ ̄`二二人\ ヽ | ツ´ ̄ ̄ ̄ ̄´ ヾ ヽ. ', |ハ ,ニ、 ,. - 、 | | | l | | ハ ィハ ,二ヽ. | | | | | 同じ板にコピペするとそのままだけど、 | | | じ' |トJ〉 /)} l | 違う板にコピペすると鬼のような怖い顔 | ハ 、'_,  ̄,, 厶イ川| に変わる摩訶不思議な佳子様コピペ。 l l /\ .. イV\川 | ,' l l ,イ `l ̄´ / /ヽl l l | l ハ `メ、 〃 ヽヽ、__ノ 「固定桁数値」という考え方は数を表示するフォーマットの問題に過ぎないので、 (想像だが)普通はMプログラマはソート等で数として扱いたい場合は 「001」と「01」と「1」が別の添え字(値)として同居したりするのを防ぐために、 先行ゼロをつけたままの形式ではグローバルにsetしないとは思う。 $tr($j(数値,桁)," ",0) で固定桁表示にできるし +固定桁数値 で元に戻るし 仮に先行ゼロをつけたままでも演算はできるし 何が不満なのか何をそんなにこだわっているのかがさっぱり見えてこない。 >>90 インターシステムズの人と話す機会があったので、Eclipseのプラグインとか 考えていないんですか? と聞いてみた。検討はしているが、計画はないとのこと。 「固定桁数値」は、ノードにセットするときはソート順を間上げて0を取るって感じでしょうか? 希に、"5"と"05"は別のデータとして管理してくれ、とかいわれて泣きを見る事がありますが。 10.50 をノードにセットすると、10.61 より後になるとか。 知り合いにCacheってどうなのって聞かれたので、 「別の言語を1本知ってるひとなら大丈夫だよ」と答えました。 1日だけ研修で習ったのですが、なかなか素直な言語だと思いました。 >>97 知っている別の言語が何かによって 印象はかなり変わってくるな。 最近知ったのですが、Cache'のライセンスの方がOracleとかよりも高いですね。 昔は安かったのかもしれませんが現在はOracleの約2倍くらいしてるみたいです。。。 >99 基本的にユーザライセンス(指名・同時)の計算を 単純にユーザ数だけで計算してるからだね。 負荷分散を考慮した複数サーバ構成でやると、 Oracleよりはるかに安くなるケースがある。 あと、言語の生産性を「昔のM言語」だけで語るのをやめてくれー。 あと、言語オタクは死んでくれー。DBMSの本質を語れないやつは ここにくるなー。お前らは一生プログラマーでいろー。 プログラミングの話題しかできないやつとは議論したくねー。 漏れはCacheに触ったことはないんだが、ちょっと教えて。 CacheはM言語でアクセスすることがやっぱり前提にあるんかな? SQLでもアクセスできるみたいだけど、それだとRDBMSとの差別化がわからん。 「表」っていう概念は人間にとってわかりやすいからね。 言語まずありき、では普及するのは厳しい気がする。 >>100 じゃあ>>89 の言ってるindexingについて議論してみろ お前スレの最初から素晴らしいですとか画期的ですとか印象しか書いてないだろ まあこれまでのやりとりを見ていて俺が思うに、多次元連想配列によるデータストアは RDBと比較して自由度が高いとか柔軟だという以前に 単にプリミティブなんだな。 だからスキーマとか索引とか、システム側が提供してくれない分、プログラマが工夫して やりくりしなきゃならない。 提供する機能が最低限だから、ディスクの使用効率も高いように見えるが ちゃんとパフォーマンスを考えて索引つけたり更新したり という処理を付加していくと、その分データ構造が冗長になって、 結局はそれほど効率は高くないんじゃないかという印象を受ける。 また提供している概念がプリミティブだから、理解するのが容易とも言われているが、 実用的なモノを作れるようになるためには、上記のような何をどのように格納すべきなのか、 というノウハウまで習得しなければならない。そしてそのノウハウは個人個人の財産でしかなく 広く共有化されるところまでいっていない。MUMPSというシステムは長い歴史を誇っているらしいが、 そういう意味では非常にもったいないというか、ユーザーグループは今まで何をしてたんだ、 と問いただすべきだろう。 あとシステムに抱き合わせで用意されている言語が前時代的だから、メタデータを基にした 定型処理のジェネレーティングみたいな手法も使えない。 例えば 「メタデータを元に構造化データをストアするルーチンを自動生成する」だとか 「データをストアすると同時に索引も更新するルーチンを自動生成する」 みたいなやつね。 DBMSの本質がどうとか言ってる人、こういう議論はどうかな。 (1) ^A(X0, X1, X2, ..., Xn) = Y と (2) ^A(X0, X1, X2, ..., Xn, Y) の違いがわかりません。 (1)は何か方向性を持つのでしょうか? >>104 は どういう場合に(1)と(2)を使い分けるのかを聞きたいのじゃないか? 昔のMUMPSで作った「.rtn」のファイルをどーやっってインポートすればいいのかわからん。 ISJの人に聞いたら教えてくれるかな? >>109 "オプション"を選んで入力形式を選べばDSM、DTM、MSMとかあるので、 適切なものを選べば大抵はそのままインポートできます。 SP-MUMPSはどれを選べばいいか知りません。 >>111 どーもありがとうございます。 SP-MUMPSなのでやはりそのままではうまくいかず、ISJのサポートに電話しました。 TEXTに書き出したものをCACHE用に手を加え、スタジオに張りつけビルドすると良いそうなので ぼちぼちやってみます。 現在のフリーダウンロード版のキャシエって Visual Studio .NET 用の C#かVB用のソースコードの吐き出しかそれに代わる機能ってありますか? Visual Studio でいろいろいじくってみたいんだけど、 ホームページみてもいまいちよくわからなかったの もしできるんなら、またユーザー登録してダウンロードしてみようかなぁっておもったんだけど しってる人おしえて 過疎ってる… 仕事でCACHEを使うことになってのですが、 なぜかMUMPSではなくSQLベースのRDB的な使い方をすることになりました。 理由はMUMPSを使える技術者が少なく、外注などを探しても なかなかみつからないからだそうです。 そうなるとCACHEを使う利点がわかりません。 偉い人たちが何を考えているのかわかりません。 MUMPSを使うというかMUMPSで作ったプロシージャを ODBCから呼び出すんだよ。 ODBCとADOはMUMPSで作ったプロシージャ を呼び出せた。 実行時引数も渡せた。 実行結果も取れるよ。 MUMPSはちょいと勉強すれば直ぐに理解できると思うんだが。 ところがどっこい、それを理解できない(したくない?)SE気取りの オサーン達がMUMPSじゃ駄目だ的なことを言うのよ。 で、シャッチョサン達はオサーン達の言い訳を 真に受けちゃったらしくてね… で、>>116 に戻ると。 つうか、CACHEでSQLって速いのか? チューニングをしていないOracleよりは速いとか。 逆に言えば、チューニングしたOracleよりは遅いということ? 2ヶ月もレスが無い かくいう私も話題は無いが いや、聞いてみたいことはあるんだが、職場で特定されそうで聞けないw 気にせずに聞いちゃえば…って、すでに半年くらい経過してるのか。 こんなスレあったんだなw とりあえず簡単に書けるとこだけ。 もう2年近くも前だが…w >>81 確かに「当然」ではないだろうけど、「理不尽な仕様」でもない。 もともとインタプリタでもあるMumpsでは、 文法上タブコードの後には命令しか書けない。 つまり、「.」も前の行のネストを継承するという命令の一種。 命令すっ飛ばしたんだから、ネストは継承されない。 それとコメントするのに気を使わなきゃならないってのも、 C言語では/* */のコメントが入れ子に出来なかったので気を使ってたが… >>101 >「表」っていう概念は人間にとってわかりやすいからね。 もちろん使用するデータの種類にもよるけど、 これはRDBが主流になり始めてから出てきた神話だったりもする。 生物の分類を考えたときに、表で考えるやつはまずいない。 大抵は樹形図になるはず。 RDB以前のデータベース設計の本なんかを読めばわかるけど、 分類データはまず樹形図になるので、 これをまず表に変換しなさい、ってな話が出てきたりもする。 Excelなんかで表を書くときでも、 同じ項目が繰り返される部分のセルを連結したりした時点で、 それはRDB的概念の表ではなくなる。 >>123 扱うデータの種類と設計によるとしか言えんわな。 Oracleのチューニングが何を指すかにもよるか。 結局トータルコストで判断するってアヤシゲな話にしかならなかったり… M言語使いは需要あります? 必ずしも日本に限らず。 c、Javaを今から始めたって、 ホントに使える人はさておき、 人数多いから、ニッチなのをと考えています。 あと、M言語開発者に聞きたいのですが、 作ったシステムのデザイン(見た目)は いくらでも見栄えよくできますでしょうか? いかにも一昔前の灰色背景の味気ない ものしかできないのでしょうか? DBスレで申し訳ありませんが、 お願いします。 >>128 M言語=Cacheスクリプトで考えちゃうけど、 CacheスクリプトはDBのスクリプトなので ストアドプロシージャみたいな感じでしか使わない。 なので、目に見える部分はVBなどで作ることになるので、 見栄えはいくらでも良くできます。 需要はわかりません・・・ >>129 ありがとうございます。 良いものが必ずしもデファクトスタンダードに ならないですからね。 cacheが良いものってわけでもないけど。 対極にあるのが圧倒的だから、どうなるのかな。 Q1.cacheに関わって何年? Q2.DBの下地(他DBでの開発、学校等でさらりと)の有無 Q3.これからも扱っていく? お答えいただければ、これ幸い。 グローバルのエキスポートをCache形式で行ってしまったデータを インポートするとDBがぶっ壊れるのは仕様? Cache Block形式なら大丈夫なんだけど。 >>132 Cache形式でエクスポートした場合は、 Cache形式でインポートすれば大丈夫だが・・・ とはいっても、いつもは^%GOGEN と ^%GIGEN でインポートエクスポートしているけど。 おぉ、レスが付いてる。 >>133 それがCache形式でインポートしてもダメなんだよね。 インデックス付きのグローバルを*Dと*Iのセットでエクスポート&インポート してるんだが、インポートした後ではユニークキー指定してあるプロパティの 値が10数個単位で重複するという状態になっちゃう。 エクスポートしたのと同じマシンでインポートしてるからエンディアンとか 文字コードとかの問題じゃないはずなのに。 >>134 そのような現象は経験したことがないな。 大抵は文字コードか、形式を間違ってインポートしたときにおかしくインポートされる。 他の原因を強いて考えるなら、データ内に変な文字コードが入っていて それが悪さしている場合だけど、現象からするとそうでもなさそう。 インターシステムズ社に問いあわせるしかないと思う。 そんなに高性能なら、なんで基幹とかで普及してないの? 実績が分かりにくい上に情報も少ないし、修得するのが実は非常に困難なのでは? いくら歯の浮いた宣伝文句見せられても、キャシェと今更心中するわけにはいかないし、日本法人信用出来ないし、多分廃れるな。 もともと医療業界で発達したDBだからじゃん? 顧客チャネルが弱い 海外だとぼちぼち金融系にも入ってってるみたいだけどね ODBが速度速くて開発がラクって事はみんなわかってる でも既存開発資産との兼ね合いとかISの事業継続性リスクとか見ると 移行コスト/リスクを正当化する稟議が降りないってことでしょ SEも枯れてるDB運用じゃない新しい技術を習得する・ させることに二の足踏むだろうし あとサポートの問題もあるんだろうな もともと、RDBはそれ以前からあった階層DBより性能は悪かったわけだが RDBは瞬く間に普及し、階層DBは廃れていった。 性能ばかりが重要なファクターじゃないってことで。 Cacheが速いのって、B+Treeでインデックス張ったキーだけじゃないの? SQLアクセスって、BtrieveにSQL被せたPervasiveSQLを思い出すんだけど。 触ってみたけど、Object Scriptわけわかんね。%Library.Dateとか日付型に現在時刻 入れようとしたんだけど、ドキュメント検索して見つかった$hってはいらねー。他に現在時刻みつかんねー。 他の言語とかDBなら分かったはずの「格納時の内部表現」って奴がCacheだと全然わからん。 日付や時刻って、どうやって格納されるの?まさか文字列で"2007/09/20"って保存?? $hそのまんま代入できるプロパティ型ってある?みつかんないんだけど。無いなら、$hって何のためにあるの?? 型同士の代入互換性が全然わかんねー!こんなの入門書の一番はじめに書いてそうなもんだけど、 見つからないのは探し方が悪いのか?MUMPSの常識は知ってて当たり前だから省略されてるのか? 教えて!エロい人!!! 多分だけど、文字列で"09/20/2007"なら入る。 現在時刻を入れたければ、$zd($h)で入れればいいかも。 >>140 どうも。 日付が保存される場合、その内部表現は何なんでしょう? 日付時刻の場合は?ミリ秒まである場合は違うんでしょうか? $hで出てくる値が内部表現そのものかな?と思っても、%Date型に$hは入らないで文字は入る。 その辺が、頭で「こうできるだろう」というイメージと違ってて気持ち悪い。 自分も勉強中ではっきりとは言えないけど、 Cache'って内部表現は、全部文字列だよ。 だからCache'(M言語上)で使用するときは、文字列として扱う。 型を意識するのってJavaとか.netから使うとき位じゃない? 調べて分かったこと。 %Date, %Timeの内部表現は$holorogと同じみたいです。ただし%Dateは$hの前半分、%Timeは$hの後ろ半分 の数字が格納されます。 管理ポータルの論理モードの値は、%Date型の場合$hの日付部分と同じ値でしたので間違いないです。 一連の勘違いの原因も判明。 ・%TimeStampの内部表現が$hと違うこと(クラスリファレンスによるとYYYY-MM-DD HH:MM:SS.nnnnnnnnnn という文字列) ・何を代入しても、%Save()しないとプロパティの検証が動かない事 が原因で、%Dateも%Timeも$hじゃない、とか26/09/2007でも2007-09-26でも何でも代入できる、とか勘違いしました。 クラスを使わないオレには何を話しているか分からんw クラスを理解出来なくても。。。と言うよりクラスを知らなくても 十分業務アプリを作成出来てしまうから覚えようとする気持ちになれないなぁ(^^; 初めてcacheをさわる人に、cacheのマニュアルは突起にくいと思います。 分かる人が見てわかるようなマニュアルでは意味が無いのでは。。。 でも、SQL使うならクラスは必要では? たしか手作業で既存のグローバル変数とSQLのフィールドをバインディングできたと思うけど、 それ使ってるの? 自動でIndex更新するのも、システム管理ポータルでテーブルチューニングできるのも、 全部クラスつかってスキーマ定義するのが前提では? 十分業務アプリを作れる、という人は、GUIに何を使って、言語バインディングとかは どうしてるの?サーバーサイドはクラスやメソッドじゃなくて全部ルーチンって事? 5.xからcacheに触れた人と、MUMPSから知ってる人ではずいぶんと前提が違う気がする。 >初めてcacheをさわる人に、cacheのマニュアルは突起にくいと思います。 激しく同意。緑本も読みづらい上に、肝心なことがどこに書いてあるのかわからない。 >>146 GUIはVB.NET、接続はActiveX。 で、ルーチン呼び出してデータを操作って感じ。 学生時代(10数年前)からMUMPSをやってたんで、 今でもこのスタイルで開発。 http://iqlveq.cn cheap mp3 downloads read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる