Zen Pythonの持ち主は、目的を達成するための明白な方法が1つ
(できれば1つ
だけ )あるべきだと考えています。
Node.jsモジュールの
リストを取得した人は、これらのモジュールの作成者が
禅仏教徒では なく、 バイフイスト -1957年に毛沢東が古典中国語に基づいて宣言した
白華雲洞運動
(百花运动)のファンに精神的に近いことを確信できます詩
は 「百花
」、 「百花
」という言葉で始まる「百花を咲かせ、百学校を競わせます」。 言い換えれば、Node.jsのモジュールは、原則として、同じことを行うための
いくつかの方法を提供し、それらから消費者は自分に最も適した方法を選択します。
しかし、なぜ誰にとっても適切な方法がひとつもないのでしょうか?
SQLiteデータベースの使用例を使用して、この質問に対する答えを検討することを提案します。
Node.jsエンジン(
JSDBなどとは異なり
ます )には、SQLiteデータベースにアクセスするための組み込みツールがなく、サードパーティのモジュールに実装を提供します。 これらの中で最も人気のあるものは、有名なマッピング会社
MapBoxによってサポートされている
sqlite3モジュールです。 npm
統計に
よる と 、月
に何万
ものダウンロードが
あります。
彼を熱心に見ると、この人気のあるモジュールのコードは完全にjavascriptではないことが簡単にわかります。 これは、ソース(ソース)
SQLiteコードをNode用のコンパイル済み
アドオンとして接続することに基づいています。
これがモジュールの幅広い適合性の理由ではありません
。LinuxおよびMac OS Xの場合、プログラムを構築するためのツールが豊富にありますが、Windowsの場合、
node-gyp要件を満たす必要性
は非常に苦痛です。 特別な問題は、アドオンのビルドにMicrosoft Visual Studio
C ++ 2010 (無料の
Expressバージョンも適しています)だけでなく、Windows 7
64ビットSDKの ISOイメージが 570以上を必要とする
64ビットバージョンのWindowsです。
メガバイト。この不便さに応えて、NodeでSQLiteを使用する2番目の方法が登場しました
-node-sqlite-purejsモジュール。Nodeエンジンによって直接実行される純粋なjavascriptで構成される(モジュール名に反映される)ため、コードがアセンブリを必要としません。 このコードは、Alon Zakai(Emscriptenの作成者)がEmscriptenを介してSQLiteコードを渡すことで受け取った
SQL.jsスクリプトに基づいています。この成果は、昨年(2012年)3月にHabrahabrで
言及しました。
残念ながら、Cモジュールの欠如はこのモジュールのほとんど唯一の利点です。安定性の点ではるかに良いことを期待しており、未解決の
問題のリストにはデータ損失とソフトシャットダウンの不可能性が含まれます。 これはすべて、CからJavaScriptへの自動変換のプロセスで、トランザクション
の原子性が
明らかに失われたためです。これは、SQLiteの主な有用なプロパティです。 この問題が解決するまで、悲しいことに、この2番目の方法は行き止まりであると考えることができます。
最近(先週の日曜日-10月27日)、nodejs Googleグループで、NodeでSQLiteを使用する3番目の方法の出現について
読むことが可能
になりました。前任者の両方の主な欠点はありません。 この新しいモジュール
( opendatabase )には、javascriptまたはjavascript形式のSQLiteコードが含まれていません-代わりに、古き良きコマンドラインインターフェイスを介して
sqliteプログラム(Windowsでは
sqlite.exeと呼ばれます)を呼び出し、
SQLクエリをダンプしてjavascriptで解析します彼女の反応。
このモジュールは、コンパイルおよびアセンブリ用のツールを必要としないことは容易に推測できます(mapboxモジュールsqlite3が必要でした)。既製の形式でSQLite Webサイトからsqliteプログラムを
ダウンロードするだけで十分です。 同じ理由で、不完全な実装でも問題はありません
(node-sqlite-purejsで観察さ
れます ):ダウンロードされたプログラムには公式の実装が含まれています。
だからこそ、このモジュールで私は、バイホイストの多様性と共栄の原則の勝利を見て、中国の
「 イブ・ イブディ・フイダオ・ムディ 」の正しさをもう一度確認します。
当分の間、この3番目のモジュールを非難できるのは、
BitbucketとMercurialのソースの場所のみです(他のほとんどのNodeモジュールのようにGithubとGitではありません)。これは私にとっては珍しいことです(つまり、gibletsと機能の知識が複雑になります)モジュール、それ以上の開発を追跡することを困難にします)。 他のプログラマー(BitbucketとMercurialに精通している)は、おそらくこの欠点を重要なものとは思わないでしょう(しかし、ソースを見ると、おそらく私がまだ知らない他の欠点を見つけるでしょう)。 このモジュールのソースコードはまだ読んでいないので、ここで私の話は終わりです。