問題タブ [htsql]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
mysql - HTSQL で生成された MySQL クエリが非常に遅い
2 つのテーブルを持つデータベースがあります。
形容詞 - ID プライマリ キー。NAME varchar; adjectives_reviews - ID プライマリ キー; ADJECTIVE_ID 外部キー。REVIEW_ID 外部キー; COUNT int
adjectives_reviews から個別の ADJECTIVE_ID のリストを取得し、同じ ADJECTIVE_ID を持つすべての行の「COUNT」列の値の合計を取得したいと考えています。
adjectives テーブルには 46,000 行があり、adjectives_reviews には ~2,849,708 があります。
次の HTSQL クエリを使用しています。
/adjectives{name,sum(adjectives_reviews.count)}
これは SQL に変換されます:
このクエリは必要な結果を生成しますが、遅すぎます。実際には非常に遅いため、HTTP サーバーがタイムアウトし、必要な出力 CSV ファイルを取得できません。このクエリを最適化する方法、または HTSQL の HTTP インターフェイスを使用せずに出力を CSV として取得する方法を探しています。
python - 接続を確立できません: mod_wsgi 経由の HTSQL (ファイルが見つかりません)
mod_wsgiを使用してApacheサーバーにHTSQLを統合したいと思います。apache と mod_wsgi の両方が正常に構成されました。Hello World python スクリプトが実行され、機能します。
ただし、HTSQL Python スクリプト ( htsql_wsgi.pyという名前で、次の手順を使用して実行しようとすると: http://htsql.org/doc/admin/deploy.html )、500 Internal Server Errorが発生します。解決策を教えてもらえますか?
Apache エラー ログには次のように表示されます。
私がすでに試したこと:
Linuxで直接動作するエラーを複製します(現在MAMPで動作しています)
同じサーバーでホストされている同じファイル (htsql_demo.sqlite) で、Python (cmd と xUbuntu ターミナルの両方) を介して直接スクリプトを正常に実行します。
パーミッションで遊んでください (777 を htsql_demo.sqlite を含むフォルダーに設定します)。
httpd.conf のアクセス許可で遊ぶ (ディレクトリ、ファイル、場所を使用して設定を変更する)
MAMP (Windows 7、Apache 2.2、Python 2.7) または xUbuntu (Apache 2.4、Python 2.7) を使用すると問題が発生します。両方のマシンで、エラーは同じです。
あなたの提案に感謝します
python - HTSQL の構文解析中の文法のあいまいさに対処する
HTSQL 構文を解析するための文法を書いていますが/
、セグメント演算子と除算演算子の両方で文字を再利用する方法に行き詰まっています。記述されている文法はあまり形式的ではないので、Python 実装の正確な出力に従っています。これは、ざっと見たところ、パーサー ジェネレーターを使用するのではなく、手書きのパーサーのように見えます。参考までに、パーサー ジェネレーターを使用しています現在使用中CL-YACC
ですCL-LEX
。(FWIW 完全なものはこちらにありますが、少し時代遅れになっている可能性があります。)
私が苦労しているあいまいさの 1 つは、 として解析されているために発生します"/1"
が'(:COLLECT (:INTEGER "1"))'
、として解析されています。またございます。"/1/2"
'(:COLLECT (:OPERATOR / (:INTEGER "1") (:INTEGER "2")))'
"/1//2"
'(:COLLECT (:OPERATOR / (:INTEGER "1") (:COLLECT (:INTEGER "2"))))'
したがって、問題は、手動パーサーに切り替えることなく、文法仕様でこれをどのように処理できるかということです。(LALR(1) の代わりに) 別のパーサー ジェネレーター クラスへの切り替えは役に立ちますか?
これまで、文法のさまざまなバリエーションを試してきましたが、文法全体で優先順位が固定されているという事実も、スラッシュの両方の解釈を妨げています。私が試したもう1つの方法は、レクサーで曖昧さを解消することでした。つまり、最初のスラッシュ(各「グループ」内)を異なる方法で処理し、異なるシンボルを返します。たとえばDIV
、適切なルールを見つけることができず、純粋に語彙構造を見ています。
最後に、私の人生を楽にするために、与えられたパーサーから完全に分岐することでこれを解決したいと思っています。予測可能な文法を持つことがより簡単に理解できるという意味で、それはより望ましいと思いますか?
展示物 1、解析ツリーを調べる Python スクリプト:
Exhibit 2、私の現在のパーサーは、これを正しく処理しません: