Vorheriger Artikel "Warum nicht 1C?" kam vor mehr als einem Jahr heraus und erregte groĂes Interesse (nur ein bisschen weniger als 100.000 Aufrufe und 2.000 Kommentare). Wie erwartet stellte sich jedoch so manche vernĂŒnftige Frage: "Wenn nicht er, wer dann?" NatĂŒrlich wurde dieser Artikel, wie viele verstanden haben, nicht einfach so geschrieben, sondern um einen weiteren Artikel danach zu veröffentlichen, in dem erklĂ€rt wird, wie die im ersten Artikel beschriebenen Probleme gelöst werden können und sollten. Aus verschiedenen GrĂŒnden verzögerte sich die Veröffentlichung dieses "Antwort" -Artikels jedoch sehr lange. Aber wie sie sagen, besser spĂ€t als nie.
, ( ) lsFusion. , : (function-level, functional), , -, (constraint) . , buzzwords, , , .
« 1?» ( ):
1 , lsFusion.
: , ..
lsFusion , ( lsFusion â ). ( ). , , â , « ». , , :
Da lsFusion versucht, den SQL-Server und nicht den Anwendungsserver optimal zu nutzen, um die Berechnungslogik auszufĂŒhren (und dies durch Gruppieren von Abfragen so weit wie möglich, um sie so wenig wie möglich auszufĂŒhren), ist der Vorgang des Lesens eines Ganzen Objekt in lsFusion existiert prinzipiell nicht. Infolgedessen sind sowohl das N + 1-Problem als auch das Ăberleseproblem in lsFusion Ă€uĂerst selten. Zum Beispiel die folgende Aktion:
fillSum(Invoice i) {
|
fillSum(Invoice i) {
|
Tabellen / Ansichten: Register
lsFusion , «» 1, , , , , « » ( , ), . , lsFusion :
, . lsFusion , , . - :
LEDGER Sales GROUP Stock stock, Sku sku SUM NUMERIC quantity, NUMERIC sum;
|
Register werden in ganz besonderen FĂ€llen unterstĂŒtzt
Wie oben erwĂ€hnt, sind Register in lsFusion kein einziger groĂer MĂ€hdrescher, sondern mehrere verschiedene Mechanismen, deren SchlĂŒssel möglicherweise der Materialisierungsmechanismus ist (Aufzeichnung und automatische Aktualisierung berechneter Daten in Tabellen).
1, lsFusion , . , lsFusion :
- , , , ( " ").
- / / , .
- , , , ââ ( ).
- (), .
lsFusion unterstĂŒtzt EinschrĂ€nkungen und Ereignisse im Allgemeinen, einschlieĂlich berechneter nicht materialisierter Daten. Um beispielsweise eine EinschrĂ€nkung zu erstellen, dass der Rest (der mit einer beliebigen Anzahl unterschiedlicher Daten / Operatoren berechnet werden kann) gröĂer als 0 sein muss, reicht es aus, nur eine Zeile zu schreiben:
CONSTRAINT currentBalance(sku, stock) < 0 MESSAGE ' ';
|
Auf die gleiche Weise können Sie beispielsweise Benachrichtigungen ĂŒber Ănderungen von Daten, einschlieĂlich berechneter Daten, erstellen:
WHEN SET(currentBalance(Sku sku, Stock stock) < 0) // 0
|
In virtuellen Tabellenparametern können nur Konstanten verwendet werden
- lsFusion . , , , , . , , , lsFusion . :
EXPORT FROM price(Sku sku), balance(date(sku), sku) WHERE name(sku) = '';
|
Anfragen
, lsFusion SQL ( ), , . , , .
lsFusion, :
- IDE â , , , ..
- IDE ( ), , .
, / (IF, SHOWIF ..), (EVAL), lsFusion.
LsFusion verfĂŒgt intern ĂŒber eine sehr leistungsstarke Engine zur Abfrageoptimierung, die in vielen FĂ€llen Optimierungen durchfĂŒhrt, die selbst teure kommerzielle DBMS (geschweige denn PostgreSQL) nicht können. Alle Leistungsprobleme, die im Artikel "Warum nicht SQL" beschrieben sind , können von lsFusion unabhĂ€ngig gelöst werden, ohne dass der Entwickler zusĂ€tzliche MaĂnahmen ergreifen muss, der sich dementsprechend auf die Lösung von GeschĂ€ftsproblemen konzentrieren kann und nicht darĂŒber nachdenkt, wie Schreiben Sie eine Abfrage korrekt und / oder in welche temporĂ€re Tabelle das Ergebnis gestellt werden soll.
Ein Beispiel aus einem Artikel ĂŒber 1C in lsFusion sieht also folgendermaĂen aus:
.,
.
..
..(,
(
..
= &))
. = .
. = &
(. < .
. NULL)
currentBalance(InvoiceDetail id) = currentBalance(sku(id));
|
SQL
SQL-92, ( SQL â ), lsFusion :
- / ( SQL â )
- ( SQL â CTE)
- ( SQL â )
lsFusion - ( GROUP BY ).
ERP- ORM , , - , ERP- SQL- .
In derselben 1C werden Abfragen jedoch nur fĂŒr DatenlesevorgĂ€nge unterstĂŒtzt. Zum Schreiben mĂŒssen Sie noch ORM-Mechanismen verwenden, deren Leistung zu wĂŒnschen ĂŒbrig lĂ€sst. In lsFusion gibt es kein solches Problem, und alle VorgĂ€nge, einschlieĂlich der Erstellung von Objekten, können auf dem Datenbankserver und mit einer Anforderung ausgefĂŒhrt werden. Zum Beispiel:
generateCards() {
|
Letztendlich wird es zu einer Anfrage (oder mehreren) kompiliert, aber ihre Anzahl hĂ€ngt nicht von der Datenmenge ab. Es wird sehr schnell ausgefĂŒhrt, und alle Ereignisse / EinschrĂ€nkungen / Aggregationen werden auch von einer begrenzten Anzahl ausgefĂŒhrt / geprĂŒft / neu berechnet Anzahl der Anfragen (wiederum unabhĂ€ngig von der Datenmenge).
Gleiches gilt fĂŒr den Mechanismus zum Ăndern / Löschen einer groĂen Menge von Daten / Objekten:
FOR sum(DiscountCard d) > 10000 DO
|
sum(DiscountCard d) â TRUE WHERE sum(d) > 10000;
|
( ) 1, . :
- ( MS SQL).
- Repeatable Read Serializable.
- , .
- .
lsFusion. , 1 ( ) lsFusion:
- , ( , ),
- , , « ».
lsFusion â , / .
:
Im Gegensatz zu 1C in lsFusion ist der AusfĂŒhrungsfluss sowohl fĂŒr den Server als auch fĂŒr den Client gleich. Diese Einheit vereinfacht die Interaktion mit dem Benutzer / Client-GerĂ€t im Hinblick auf den Entwicklungsprozess erheblich. Das Beispiel in dem Artikel ĂŒber 1C ist also in der Sprache lsFusion geschrieben und sieht dementsprechend folgendermaĂen aus:
f() <- someData(); // myForm
|
, lsFusion ( /). , lsFusion CLIENT INTERNAL, . Java, - â JavaScript. â â , .
- ( ) ââ ( , , ). (, ), , , 1 ( , async / await, ).
lsFusion , , , , .
WYSIWYG:
, 1 , ( ), 2 :
- - , / ().
- .
1 . lsFusion , , , «Excel-style» , , , , , . ( lsFusion) « » â / . , .
/
In lsFusion können Sie beim Festlegen von Eigenschaften, Filtern und anderen Elementen in einem Formular auf alle Objekte gleichzeitig zugreifen, auch wenn sie in verschiedenen Listen (oder anderen Ansichten) angezeigt werden. Gleichzeitig ĂŒberwacht die Plattform selbst Ănderungen an Objekten (sowie Ănderungen an Daten) und aktualisiert Formulardaten mithilfe dieser Objekte automatisch. Wenn Sie beispielsweise das folgende Formular erstellen:
FORM balance
|
Redundante Abstraktionsebenen
Das Hauptprinzip bei der Erstellung von lsFusion war und ist das Prinzip - die Reinheit und VollstÀndigkeit aller erstellten Abstraktionen. So:
- 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?» , , , , . , , .
Wie im vorherigen Abschnitt erwĂ€hnt, ist die Zuordnung der Datenlogik in lsFusion zu einer relationalen Datenbank transparent und kann vom Entwickler vollstĂ€ndig gesteuert werden. Zusammen mit Materialisierungen im Allgemeinen und Indizes kann ein Entwickler (und sogar ein Administrator) nahezu jede Leistung erzielen, selbst bei groĂen Datenmengen. Da die Plattform selbst Ănderungen im physischen Modell ĂŒberwacht und die Datenbankstruktur ohne zusĂ€tzliche Migrationen aktualisiert, kann (und sollte) der Prozess zur Leistungsoptimierung fĂŒr eine laufende Datenbank durchgefĂŒhrt werden, wenn die Statistiken und Optionen fĂŒr die Verwendung dieser Datenbank bekannt sind. Nehmen wir also an, wir haben ein einfaches Beispiel:
date = DATA DATE (DocumentDetail)
|
- Verbinden Sie sich mit der Produkttabelle. Der Barcode in der SKU-Tabelle stimmt mit dem angegebenen ĂŒberein.
- ZĂ€hlen der Anzahl der Dokumentzeilen fĂŒr alle Daten, die gröĂer als die angegebene sind.
In diesem Fall verfĂŒgt der SQL Server ĂŒber zwei Optionen: Entweder nach dem Index nach Datum in der Zeilentabelle oder nach dem Index nach Barcodes in der Warentabelle, nach Waren suchen und dann nach dem Index von Sku in der Tabelle Zeilentabelle. In beiden FĂ€llen lĂ€sst die Leistung zu wĂŒnschen ĂŒbrig (wenn es viele Bewegungen eines Produkts und viele Produkte gibt). In lsFusion reicht es aus, die folgenden Zeilen zu Ă€ndern / hinzuzufĂŒgen, um dieses Problem zu lösen:
barcode(DocumentDetail dd) = barcode(sku(d)) MATERIALIZED; // ,
|
Geschlossene Quellen und Lizenzen
- . 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-.
«» ( )
( , ) , / .
( ), , , - . . . .
( Google docs)
, ( , , , ).
, ( ). , .
1, , . ( ), , , , , ( ). , :
- , .
- , , , « » ( , ).
/
:
- â , drag-drop .
- â WYSIWYG , - ( ).
- â > ( -> , ).
- , â ( )
, ( -).
/
1 :
( )
, :
- ( )
- ( / )
- ..
1 «-» , 1 / , , .
, « 1», â - 1 lsFusion ( , ). , 1- , .