3

私は現在、GoogleのGTFS仕様を使用して、数百の公共交通機関、そのルーター、駅、時刻、およびその他の関連情報に関する情報を取得するプライベートプロジェクトに取り組んでいます。私はここと同様の情報を持つグーグルコードウィキページから私の情報を取得します。たくさんのデータがあり、そのデータは複数のCSV形式のテキストファイルに分割されています。これらは巨大になる可能性があり、80〜100MBのデータに及ぶものもあります。

私が持っているデータを使用して、すべてを、プロジェクトで使用するためにその上にレイヤーを構築できる優れた堅固なデータベースに変換したいと思います。GPS測位を使用して、場所と周辺のすべての駅/停車地を特定します。

私の目標は、クエリされた結果のためにデータセットを小さく保ちながら、これらすべての停車地と駅のすべての情報にできるだけ少ない呼び出しでアクセスすることです。

私は現在、MongoDBとCouchDBのGeoSpatialサポートに傾倒しており、小さなデータセットの取得を実際に最適化できます。ただし、その路線の通過ルートに沿って情報を伝達するため、ルート上のすべての停車地をリンクする必要もあります。この場合、Neo4jやOrientDBのようなグラフDBの恩恵を受けることができることがわかりましたが、私が知っていることから、GeoSpatialはサポートされておらず、グラフDBが必要なものであると100%確信していません。

完璧な解決策は存在しないかもしれませんが、私はここに来て、自分の状況に最適なものを見つけるための助けを求めています。私は自分が選んだものの制限を回避しなければならない可能性があることを知っていますが、少なくとも自分の研究を行い、それが現時点で得られる最高のものであることを知りたいと思います。

データを複数のDBに分割することも提案されていますが、すべての情報がIDを介して非常に緊密に相互接続されているため、非常に面倒になる可能性があります。

どんな助けでもいただければ幸いです。

4

3 に答える 3

1

明らかに、グラフデータベースは100%あなたの問題に適合します。ここでの私のアドバイスは、neo4jまたはorientdbを介していくつかの地理空間モジュールを使用することですが、他にも無料のオープンソース実装がいくつかあります。

地理空間的なものがすべて実装されている現在の最良のものは、 neo4j-spatialパッケージだと思います。しかし、私が知る限り、必要に応じて、地理空間的なもののほとんどを自分で再現することもできます。

ところで、分割について言えば、データ/クエリの量が多くなる場合は、負荷を共有して、この用語でモデルを考えることを強くお勧めします。確かにあなたは何かをすることができます。

于 2011-10-06T12:17:40.417 に答える
1

私はMongoのGeoSpatial機能を使用しましたが、C#またはjavascriptの実装についてサポートが必要な場合は、ガイダンスを提供できます。非常に使いやすいので、開始することをお勧めします。私は今Neo4jについてすべてを学んでおり、MongoとNeo4jの両方を活用するハイブリッドアプローチに取り組んでいます。MongoオブジェクトIDを使用して、MongoのドキュメントをNeo4jのノードに相互参照することをお勧めします。

ハイブリッド実装では、プロファイルとその他の大きな静的データをMongoに保存しています。Neo4jでは、友達や友達の友達のような関係を保存しています。2人の友人が一緒に見たいと思う映画(または実際には最初は考えていなかった他の関係)を分析したい場合は、そのオブジェクトID参照を保持することで、各ノードに出て行くように指示するコードを追加するだけです。関連するプロフィールの映画のリスト。


2011-02-12を追加:

最近、複数のデータベースを使用することになったいくつかのソリューションのプロトタイプを作成して実装したので、この「ハイブリッド」のアイデアをフォローアップしたかっただけです。マーティンファウラーはこれを「ポリグロットパーシスタンス」と呼んでいます。

リレーショナルデータベース、ドキュメントデータベース、グラフデータベース(私の場合、これは通常SQL Server、MongoDB、Neo4j)を組み合わせて使用​​していることがよくあります。質問は地理空間と同様にデータモデリングに関連しているので、ここで触れたいと思いました。

私はNeo4jをサイト編成(RESTモデルのハイパーメディアのアイデアと同様)、ソーシャルデータのモデリング、および推奨事項の作成(多くの場合、ソーシャルデータに基づく)に使用しました。結果として、私は通常、プログラミングを開始する前に、アプリケーションのこの部分をモデル化します。

MongoDBはそのような単純な永続化メカニズムを提供するため、アプリケーションの残りの部分のプロトタイピングにMongoDBを使用することになります。私はユーザーインターフェイスを使用してアプリケーションの開発を開始するのが好きなので、これはうまく機能することになります。

エンティティをMongoからSQLServerに移動し始めるとき、コンテキストは通常​​重要です。たとえば、ユーザーが定期的に収集されたデータに基づいて日次レポートを作成できるアプリケーションがある場合、それらのレポートを作成するプロシージャを実行するのが理にかなっている場合があります。毎晩、Mongoに日次レポートオブジェクトを格納します。これらのオブジェクトは、必要に応じてより大きな集計レポートに組み合わせることができます(明らかに、これはいくつかの特殊なケースを考慮していませんが、ポイントには関係ありません)...一方、ユーザーの場合非常に特定の期間に限定されたオンデマンドレポートをプルする必要がある場合は、すべてをSQLサーバーに保持し、必要に応じてそれらのレポートを作成することが理にかなっている場合があります。

そうは言っても、これはもっと熱心に考える価値があります。ここに役立つかもしれないいくつかの考慮事項があります:

  • 私は通常、データベースからエンティティをプルする(つまり(リレーショナルデータベースのコンテキストで)-エンティティまたはリストを生成するために必要なデータを提供するデータベースからデータをクエリする)ことがわかった場合、エンティティをリレーショナルデータベースに格納しようとします要求されたパラメータを満たすエンティティの]は、重要な処理を必要としません(たとえば、複数の結合)
  • ACIDコンプライアンスが必要ですか(グラフの問題がある場合は、Neo4jを活用できます)?ACIDに準拠したドキュメントデータベースがありますが、Mongoが準拠していない理由があります。MongoDBがACIDに準拠していないとは、実際にはどういう意味ですか?

私が野生で見たMongoの使用法の1つは、言及する価値があると思いました。Hadoopは、Mongoに格納される大規模なハッシュテーブルの計算に使用されていました。トリップアドバイザーでも、オファーや広告などのターゲティングに関して、ユーザーベースのカスタマイズに同様のアプローチが使用されていると思います。

于 2011-10-10T16:42:48.727 に答える
0

NoSQLが存在するのは、MySQLユーザーが、データベースが大きくなったり複雑になったりすると、すべてのデータベースにパフォーマンスの問題があると想定しているためです。

PostGISを使用することをお勧めします。残りのデータニーズにも同じデータベースを使用できます。

http://postgis.refractions.net/

于 2011-11-11T06:04:37.293 に答える