前の記事「なぜ1Cではないのですか?」 1年以上前に公開され、非常に強い関心を呼び起こしました(10万回の視聴と2千回のコメントに少し足りません)。しかし、予想通り、多くの合理的な質問が生じました。「彼でなければ、誰ですか?」もちろん、多くの人が理解しているように、その記事はそのように書かれているのではなく、その後に別の記事をリリースするために、最初の記事で説明されている問題をどのように解決できるか、そして解決すべきかが説明されます。しかし、さまざまな理由で、この「応答」記事のリリースは非常に長い間遅れていました。しかし、彼らが言うように、決して遅くなるよりはましです。
, ( ) lsFusion. , : (function-level, functional), , -, (constraint) . , buzzwords, , , .
« 1?» ( ):
1 , lsFusion.
: , ..
lsFusion , ( lsFusion — ). ( ). , , — , « ». , , :
lsFusionは、アプリケーションサーバーではなくSQLサーバーを最大限に活用して計算ロジックを実行しようとするため(クエリの実行をできるだけ少なくするために、クエリをできるだけグループ化することでこれを行います)、全体を読み取る操作lsFusion内のオブジェクトは原則として存在しません。結果として、lsFusionのN +1問題とオーバーリード問題の両方が非常にまれです。たとえば、次のアクション:
fillSum(Invoice i) {
|
fillSum(Invoice i) {
|
テーブル/ビュー:レジスタ
lsFusion , «» 1, , , , , « » ( , ), . , lsFusion :
, . lsFusion , , . - :
LEDGER Sales GROUP Stock stock, Sku sku SUM NUMERIC quantity, NUMERIC sum;
|
レジスタは非常に特殊な場合にサポートされます
上述したように、lsFusionのレジスタが一つの大きな結合ではなく、いくつかの異なる機構の鍵は、おそらく、ある実体の機構(記録テーブルに計算されたデータの自動更新)。
1, lsFusion , . , lsFusion :
- , , , ( " ").
- / / , .
- , , , “” ( ).
- (), .
lsFusionは、計算された非実体化データを含む、一般的な制約とイベントをサポートします。したがって、たとえば、剰余(任意の数の異なるデータ/演算子を使用して計算できます)が0より大きくなければならないという制約を作成するには、次の1行だけを書き込むだけで十分です。
CONSTRAINT currentBalance(sku, stock) < 0 MESSAGE ' ';
|
また、同じ方法で、たとえば、計算されたデータを含む、任意のデータの変更に関する通知を作成できます。
WHEN SET(currentBalance(Sku sku, Stock stock) < 0) // 0
|
仮想テーブルパラメータで使用できるのは定数のみです
- lsFusion . , , , , . , , , lsFusion . :
EXPORT FROM price(Sku sku), balance(date(sku), sku) WHERE name(sku) = '';
|
お問い合わせ
, lsFusion SQL ( ), , . , , .
lsFusion, :
- IDE — , , , ..
- IDE ( ), , .
, / (IF, SHOWIF ..), (EVAL), lsFusion.
LsFusionには、非常に強力なクエリ最適化エンジンが内部にあり、多くの場合、高価な商用DBMS(PostgreSQLは言うまでもなく)でも実行できない最適化を実行します。したがって、「SQLを使用しない理由」の記事で説明されているすべてのパフォーマンスの問題は、開発者が追加のアクションを実行することなく独立して解決できます。開発者は、ビジネス上の問題の解決に集中でき、その方法を考える必要はありません。クエリを正しく記述し、および/またはその結果を配置する一時テーブルに記述します。
したがって、lsFusionの1Cに関する記事の例は次のようになります。
.,
.
..
..(,
(
..
= &))
. = .
. = &
(. < .
. NULL)
currentBalance(InvoiceDetail id) = currentBalance(sku(id));
|
SQL
SQL-92, ( SQL — ), lsFusion :
- / ( SQL — )
- ( SQL — CTE)
- ( SQL — )
lsFusion - ( GROUP BY ).
ERP- ORM , , - , ERP- SQL- .
ただし、同じ1Cでは、クエリはデータの読み取り操作でのみサポートされます。書き込みの場合でも、ORMメカニズムを使用する必要があり、そのパフォーマンスには多くの要望があります。lsFusionでは、このような問題はなく、オブジェクトの作成を含むすべての操作をデータベースサーバー上で1回のリクエストで実行できます。例えば:
generateCards() {
|
最終的には、1つのリクエスト(または複数のリクエストにコンパイルされますが、その数はデータの量に依存しません)で非常に迅速に実行され、すべてのイベント/制約/集計も制限付きで実行/チェック/再計算されますリクエストの数(ここでも、データの量に依存しません)。
同じことが、大量のデータ/オブジェクトを変更/削除するメカニズムにも当てはまります。
FOR sum(DiscountCard d) > 10000 DO
|
sum(DiscountCard d) ← TRUE WHERE sum(d) > 10000;
|
( ) 1, . :
- ( MS SQL).
- Repeatable Read Serializable.
- , .
- .
lsFusion. , 1 ( ) lsFusion:
- , ( , ),
- , , « ».
lsFusion — , / .
:
lsFusionの1Cとは異なり、実行フローはサーバーとクライアントの両方で同じです。この統合により、開発プロセスの観点から、ユーザー/クライアントデバイスとの対話が大幅に簡素化されます。したがって、1Cに関する記事の例は、lsFusion言語で記述されているため、次のようになります。
f() <- someData(); // myForm
|
, lsFusion ( /). , lsFusion CLIENT INTERNAL, . Java, - — JavaScript. “ ” , .
- ( ) “” ( , , ). (, ), , , 1 ( , async / await, ).
lsFusion , , , , .
WYSIWYG:
, 1 , ( ), 2 :
- - , / ().
- .
1 . lsFusion , , , «Excel-style» , , , , , . ( lsFusion) « » — / . , .
/
lsFusionでは、フォームにプロパティ、フィルター、およびその他の要素を設定するときに、それらが異なるリスト(または他のビュー)に表示されている場合でも、すべてのオブジェクトに一度にアクセスできます。同時に、プラットフォーム自体がオブジェクトの変更(およびデータの変更)を監視し、これらのオブジェクトを使用してフォームデータを自動的に更新します。たとえば、次のフォームを作成する場合:
FORM balance
|
冗長なレベルの抽象化
lsFusionを作成する際の主な原則は、作成されたすべての抽象化の純粋さと完全性という原則でした。そう:
- lsFusion . — . , .
- ( ) , , , ( ).
:
, lsFusion 1. 1 lsFusion:
- /
lsFusion ( ) . , ( , ..) , «» ( ).
- /
, 1 - lsFusion ( , ).
- /
lsFusion , . - « » lsFusion . , . - , , ( ). lsFusion .
- / / (BI)
. , / lsFusion ( ). , ( , ) lsFusion :
- — , JasperReports, Java. pixel-perfect , .
- — , , , .
- — «» , , « » ( ).
- — , ( ) JSON, XML, XLSX, DBF .
lsFusion — . , , . , , / .
lsFusion , lsFusion , / ( 1). lsFusion — , . , , , ( ). - .
:
- ( BI).
- (, )
- .
PS: « » ( ) « 1?» , , , , . , , .
前のセクションで述べたように、lsFusionのデータロジックのリレーショナルデータベースへのマッピングは透過的であり、開発者が完全に制御できます。一緒にmaterializations一般的とインデックス、開発者(さらには管理者が)も、大量のデータに、ほぼすべての性能を達成することができます。さらに、プラットフォーム自体が物理モデルの変更を監視し、追加の移行なしでデータベース構造を更新するため、このデータベースを使用するための統計とオプションがわかっている場合、実行中のデータベースでパフォーマンス最適化プロセスを実行できます(実行する必要があります)。簡単な例があるとしましょう:
date = DATA DATE (DocumentDetail)
|
- 製品テーブルと結合すると、SKUテーブルのバーコードが指定されたバーコードと一致します。
- 指定された日付よりも大きいすべての日付のドキュメント行数をカウントします。
この場合、SQLサーバーには2つのオプションがあります。行のテーブルの日付によるインデックスによって実行されるか、商品のテーブルのバーコードによるインデックスによって実行され、商品を検索してから、Skuによるインデックスによって実行されます。行のテーブル。どちらの場合も、パフォーマンスには多くの要望があります(1つの製品と多くの製品の動きが多い場合)。lsFusionでは、この問題を解決するには、次の行を変更/追加するだけで十分です。
barcode(DocumentDetail dd) = barcode(sku(d)) MATERIALIZED; // ,
|
クローズドソースとライセンス
- . Microsoft, , .Net, Linux.
lsFusion LGPL v3 , , ( ), . GitHub. Maven-, Maven: compile, install, package .. , , GitHub Projects. , .
. lsFusion . , ( ), ( ).
( ), , ( ).
lsFusion , tutorial, , .
lsFusion . ( ), . , ( ) .
, , , , , . :
invoice (InvoiceDetail id) = DATA Invoice;
|
, , - , custom-made . , , . , / «», .
lsFusion . :
- ( , — ) — - . , , , , / .
- — . - - (, ).
- — , ( ). , - ( «» / , ).
- , ( ). , this, , lsFusion , - «».
- — , , - ( )
, , , lsFusion ( ), lsFusion / , .
, «» lsFusion — ( ) , , . ( , ), ( ).
, , Everything as code . lsFusion.
, , lsFusion . , , ( ). lsFusion IDEA : , , , .. -, , .
, , , — 1, ERP-. , , , :
- .
- , , , .
lsFusion : - , - . - , .
. “ - ”. Java . , 1, lsFusion . , , , . , . . , .
, lsFusion — lsFusion ANTLR, IDEA Grammar-Kit (), JFlex ().
UI. - Java SE (Swing, Web Start), , . , , -, - .
- lsFusion :
BI — “” lsFusion “ ”. :
- pivot-table, subtotal — BI, ( ),
- plotly — ,
- tableToExcel — Excel ( , collapsible ..).
, ( , ), open-source, - — .
. lsFusion — JasperReports.
. 1 , , , , :
) , , , 4 ;
) “”, pixel-perfect .
lsFusion : ( renderer’, , . .), . BI ( , . .), ( ).
- IDE. IDE, IDEA (Eclipse ), IDEA . , , IDEA , . IDEA ( IntelliJ Platform) IDE, , lsFusion ( , lsFusion ). stub index’, chameleon element' lsFusion (, , ).
- . Everything as code , , , Git. , Subversion (, , ).
/ . EaC / Java, Maven ( lsFusion repo.lsfusion.org).
Maven- pom.xml :
<repositories> <repository> <id>lsfusion</id> <name>lsFusion Public Repository</name> <url>http://repo.lsfusion.org</url> </repository> </repositories>
, Maven Java . , , Maven , pom.xml.
<dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-math3</artifactId> <version>3.2</version> </dependency>
IDE, .
. JDBC, / . Postgres ( Docker, yum ..)
Java Spring, .
, lsFusion LGPL v3.0, , , , lsFusion . , lsFusion , , . , lsFusion , , , , / , . -? , «-» , , , — , -. , ( , , «as is», «to be»). , , , «», , :
- — , , . «», — .
- — ,
, lsFusion (- / lsFusion, ), (, , ).
. , ( - ), ( / ). ( IT) , , , ( ). MyCompany. , , , , , , .
, , - — . , . , , , :
- - ( ), , / . .
- , , , ( , , ). , , , , . , 30 3000 , - .
, , . , lsFusion , 1 ERP-.
, « 1», — - 1 lsFusion ( , ). , 1- , .