[php] binary search list

Pagina: 1
Acties:
  • 2.930 views

Vraag


Acties:
  • 0 Henk 'm!

Anoniem: 80910

Topicstarter
Mijn vraag
Ik ben bezig met een project die gebruikt maakt van json. ik heb de binarysearch met een where voor 1 record gebruiksklaar maar wil nu ook lijsten gaan teruggeven.

Bash:
1
2
3
4
5
6
7
8
9
app r3m_io/node list -class=Account.Permission \
-page=7 \
-limit=100 \
-where[]="'#class' start 'Ac'" \
-where[]=and \
-where[]="'name' !== 'q'" \
-where[]=and \
-where[]="'uuid' !== 'q'" \
-index


-index triggerd binary search indexes van de where properties.
-where !==q vergelijking zorgt voor extra indexes en sortering van properties: #class, name & uuid

resulteert in:

JSON:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
{
    "page": 7,
    "limit": 100,
    "count": 618,
    "max": 618,
    "list": [
        {
            "uuid": "e0bcbad7-945c-4005-b800-6138f5b953e7",
            "#class": "Account.Permission",
            "name": "Task:create",
            "#index": 600
        },
       ...
    ],
    "where": [
        {
            "attribute": "#class",
            "operator": "start",
            "value": "Ac"
        },
        "and",
        {
            "attribute": "name",
            "operator": "!==",
            "value": "q"
        },
        "and",
        {
            "attribute": "uuid",
            "operator": "!==",
            "value": "q"
        }
    ],
    "relation": false,
    "parse": false,
    "ramdisk": false,
    "mtime": 1717972295,
    "transaction": false,
    "duration": 598.1290340423584,    


Nu doe ik de lijsten op de volgende manier:

hij haalt met binary search het eerste record op. veranderd daarna de query met een "not-in" lijst met uuid's van de reeds gevonden records.

Echter kom ik er nog niet helemaal uit qua sortering en gedachte van verder uitvoeren. op het moment hij een not-in heeft, veranderd het gedrag van het ophalen van de records. Nu heb ik met chat gtp en github copilot iets geprobeerd, maar kwam met de oplossing om eerst links van de gevonden "binary search record" verder te kijken, dus left -1 totdat je aan het begin bent. en daarna rechts van de gevonden de gevonden "binary search record" te kijken.

Ik zou graag weten of dit juist is, want kreeg middels een andere methode maximaal "de diepte van binarysearch als aantal records terug" voordat ie links en rechts ging uitvoeren.

Mij lijkt het beter om de "nearest-neighbor" strategy te gaan toepassen, namelijk beginnen met 1 linkse record, daarna 1 rechtse record, 2e linkse record, 2e rechtse record totdat ie het aantal heeft bereikt.

Toch zal de volgorde ook niet kloppen met de huidige manier (eerst links, daarna rechts) ofdan wel "nearest-neighbor" dus ik zal een sort moeten doen op het resultaat.

Iemand tips/ ervaring met dit soort complexe stof ? 8)7


Relevante software en hardware die ik gebruik
...

php & json
Bash

Wat ik al gevonden of geprobeerd heb


als ik op where zoek, kom ik alleen mysql tegen, waarin dit probleem is opgelost, maar ik de oplossing niet weet, binary search is werkend (voor limit 1 & page 1) maar ik weet niet goed waar ik op moet zoeken.


Dus mijn concrete vraag: welke strategy is beter: eerst links en daarna rechts, of nearest neighbor...


Voor de geïnteresseerden:
https://github.com/r3m-io/framework of
https://github.com/r3m-io/node en ja je mag er wat van vinden.

En de site ligt eruit omdat ik bezig ben met documentatie. Wil nog eerst een aantal dingen doen, en heb volgens mij nog geen gebruikers behalve mijzelf.
...

[ Voor 5% gewijzigd door Anoniem: 80910 op 14-06-2024 15:18 . Reden: spelfouten ]

Beste antwoord (via Anoniem: 80910 op 17-06-2024 17:43)


  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Je bent niet te volgen, full stop. Qua kennis zit je wellicht in mijn vakgebied, maar ivm de warrigheid van je posts is de kans 0 dat ik je kan helpen. Ik vrees dat zelfs Jochem Myjer jou niet bij houdt.

{signature}

Alle reacties


Acties:
  • +1 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Laatst online: 11:14

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

Waar kijk ik naar? Die bash opdracht, is dat je eigen framework? Die JSON ook? Want ik word er geen wijs uit, noch uit je vraag. Je geeft aan PHP & JSON te gebruiken, maar verder... :?

Edit: Oh, "r3m_io" lijkt een obscuur framework te zijn waarvan de site plat ligt...


Zoals ik het begrijp: je hebt een lijst met items (zeg even letters voor het gemak):
code:
1
ABBBBCCDDEEEEFF

Als je daarin, met een binary search, op zoek gaat naar B('s) dan begin je dus op de eerste D, dan moet je links (want B < D) en kom je uit op de derde B. Vervolgens wil je weten of je beter met stapjes van 1 links kunt blijven gaan tot je geen B meer tegen komt, of dat je dat mogelijk op een andere manier efficiënter kunt doen? Interpreteer ik je vraag zo goed?
Anoniem: 80910 schreef op vrijdag 14 juni 2024 @ 14:40:
Voor de geïnteresseerden:
https://github.com/r3m-io/framework of
https://github.com/r3m-io/node en ja je mag er wat van vinden.

En de site ligt eruit omdat ik bezig ben met documentatie. Wil nog eerst een aantal dingen doen, en heb volgens mij nog geen gebruikers behalve mijzelf.
...
Het zou wel heel handig zijn als je dat metéén vermeld had. Daarbij kun je met zo'n topicstart natuurlijk niet van mensen verwachten dat ze bekend zijn met je framework en daarbij met je toch wel warrige en vol aannames van familiariteit met je framework topicstart je kunnen helpen.

[ Voor 109% gewijzigd door RobIII op 14-06-2024 15:31 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

Anoniem: 80910

Topicstarter
Ja het gaat dus inderdaad tot aan begin b maar wat met e, die is ook goed, moet je dan eerst links oplossen, daarna rechts of nearest neighbor; 1e links, 1e rechts, 2e links, 2e rechts...

Waarin verder ik het maak was dacht ik niet relevant...

[ Voor 13% gewijzigd door Anoniem: 80910 op 14-06-2024 16:17 ]


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Laatst online: 11:14

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

Anoniem: 80910 schreef op vrijdag 14 juni 2024 @ 16:16:
Ja het gaat dus inderdaad tot aan begin b maar wat met e, die is ook goed, moet je dan eerst links oplossen, daarna rechts of nearest neighbor; 1e links, 1e rechts, 2e links, 2e rechts...
Over het algemeen wil je voor efficiënte memory-access lineair door items heen spitten ipv van hot-naar-haar springen in memory (locality). Maar dat wordt pas interessant bij ordegrootte(s) meer items dan dit voorbeeld en is voor nu dus een microoptimalisatie. En dat laatste is ook denk ik het antwoord op je vraag: doe lekker wat je 't best uit komt, het scheelt je hooguit nanosecondes tenzij je een shitton aan items door moet spitten (en dan is een interpreted taal als PHP sowieso al niet 't beste uitgangspunt). En anders implementeer je beide (of alle) ideeën die je hebt en doe je gewoon meten == weten ;)

Als E ook goed is (en "P" en "X" en ... ook) zou ik gewoon een nieuwe binary search doen per item. Again, het parsen van de JSON, het uitvoeren van de PHP etc. zal veel zwaarder zijn dan een paar values in memory bekijken.
Anoniem: 80910 schreef op vrijdag 14 juni 2024 @ 16:16:
Waarin verder ik het maak was dacht ik niet relevant...
Is het ook niet, maar als je allerlei code / json erbij sleept waarvan niemand weet wat het voor moet stellen / wat het doet vertroebelt dat je topic alleen maar, helemaal als 't totaal irrelevant is voor je vraag ;) Grofweg alles tot een alinea of 2 na 't tweede codeblok had je kunnen samenvatten met "Ik ben bezig met een binarysearch een lijst te doorzoeken". Of je had 't kunnen uitleggen zoals ik in mijn vorige post deed :)

[ Voor 33% gewijzigd door RobIII op 14-06-2024 16:45 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

Anoniem: 80910

Topicstarter
Wat ik nog wil toevoegen is dat je met de verschillende methoden wel verschillende records krijgt, bij de een eerst ervoor, dan pas erna en bij en bij de nearest neighbor, het gebied rondom, wat denk ik handiger is, maar ik kan natuurlijk ook een paar options toevoegen aan het command om er links van te zoeken, rechts van te zoeken en rondom : strategy:left|right|around

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Laatst online: 11:14

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

Anoniem: 80910 schreef op vrijdag 14 juni 2024 @ 17:14:
Wat ik nog wil toevoegen is dat je met de verschillende methoden wel verschillende records krijgt, bij de een eerst ervoor, dan pas erna en bij en bij de nearest neighbor, het gebied rondom, wat denk ik handiger is, maar ik kan natuurlijk ook een paar options toevoegen aan het command om er links van te zoeken, rechts van te zoeken en rondom : strategy:left|right|around
Uh, ja, alles kan. Je kunt ook nadat je alle matches bij elkaar gesprokkeld hebt er nog een sort op loslaten, dan boeit de volgorde waarin je ze matched ook niet. Ik zie het hele probleem niet zo. Maar waarom de gebruiker(s) van je framework vermoeien, of je API "vervuilen", met dit soort opties als ze (nagenoeg?) geen meetbaar, laat staan merkbaar, effect hebben? Ik kan me niet voorstellen dat we het hier over zo'n grote dataset hebben (omdat je data uit JSON komt) dat de keuze hier echt boeiend is. Als dat volgens jou wel zo is dan moet je misschien de usecase even wat verder duiden. En anders zou ik gewoon lekker iets kiezen en de gebruiker niet vermoeien / m'n API niet vervuilen met geneuzel in de marge.

[ Voor 27% gewijzigd door RobIII op 14-06-2024 17:49 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

Anoniem: 80910

Topicstarter
Nee wat ik bedoel is dat de records niet het zelfde zijn, bij een andere strategie, er komt een standaard strategie, maar om de andere te triggeren kun je dan optioneel
Bash:
1
strategy=left|left-only|around|around-left-start|around-right-start|right-only|right 

waarbij around en around-left-start default en hetzelfde zijn.

En left-only, alleen het linkerdeel doet

En right-only, alleen het rechterdeel doet

En left, eerst het linkerdeel daarna verder in het rechterdeel

En right, eerst het rechterdeel daarna verder in het linkerdeel

(Ik kwam van 12 seconden voor het volle bestand)
Voor het volle bestand is binarysearch 600 msec en de "domme list foreach" 350 msec maar ik vind "gebied" een handige feature van binarysearch. Dus het valt me mee, bij page 1 & 5 records doet ie onder 10 msec, dus ben zeer tevreden...

[ Voor 43% gewijzigd door Anoniem: 80910 op 14-06-2024 18:28 ]


Acties:
  • +1 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Laatst online: 11:14

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

Anoniem: 80910 schreef op vrijdag 14 juni 2024 @ 17:51:
(Ik kwam van 12 seconden voor het volle bestand)
Voor het volle bestand is binarysearch 600 msec en de "domme list foreach" 350 msec maar ik vind "gebied" een handige feature van binarysearch. Dus het valt me mee, bij page 1 & 5 records doet ie onder 10 msec, dus ben zeer tevreden...
Geen van die getallen zegt iets zonder te weten hoe groot het json bestand is, hoeveel items er in zitten, of de laadtijd van die json in die tijden is meegenomen enz. enz.

Verder snap ik niet waarom je andere resultaten zou willen hebben afhankelijk van een "strategie". Als ik alle rode appels met een gewicht boven 100gr wil hebben zal 't me toch worst wezen wat je voor "strategie" kiest en hoe je aan de antwoorden komt? Als er maar consistente en kloppende antwoorden uit komen. Het is me dus (wederom en nog steeds) niet echt duidelijk wat je nou precies aan 't doen bent en je lijkt van ons te verwachten dat we een glazen bol hebben.

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

Anoniem: 80910

Topicstarter
Die andere strategy komt uit het feit van gelijkenis. De records rondom de eerste pick hebben meer gelijkenis , dan diegene helemaal vooraan of achteraan. Bij een magazijn bijvoorbeeld zou je locatie ook kunnen meenemen, dan wil je toch de items die het dichtst bij die locatie liggen? En daar heb je dan dus verschillende strategieën voor.

Het kan ook zijn dat je alleen links van de pointer wil, of alleen rechts, al komt dat wellicht niet vaak voor. Bij embeddings gesorteerd op similarity wil je dan toch de percentages rondom hebben, of percentages kleiner, of percentages groter, maar jij zegt dat het niet uitmaakt. Kun je het uitleggen waarom het niet uit maakt, want ik ben ervan overtuigd dat het wel uitmaakt. Bij eerst links dan rechts, moet de limiet groter zijn dan het aantal juiste linkse records, anders neemt ie rechts niet mee. Bij rondom wordt het evenwaardig verdeeld, maar krijg je dus andere records mee, dan bij eerst links dan rechts, dus ook andere percentages...

En over de snelheid: de where functie kost 0.5 - 1 msec. Maarja ik vergelijk ook objecten, er zitten er momenteel 688 records in en op pagina 7 en limiet 100 en een where die alle records ophaalde was de test. Dus binarysearch was daar langzamer dan ordinair een lijst doorspitten en vergelijken met een where.

Over 5 records op pagina 1 en limiet 5, duurde het soms 7 msec...

Momenteel lijkt het met de verschillende strategieen te werken in de where, krijg dezelfde resultaten met bash option -index en de normale manier.

Had nog wel problemen met de around, hij bleek eerder met links klaar te zijn en deed zo evenveel linkse als rechtse, maar rechts waren er nog meer goed.

Nu ga ik kijken of ik makkelijk spatie/fork kan gebruiken en zo parallel gaan 8)

[ Voor 26% gewijzigd door Anoniem: 80910 op 15-06-2024 21:28 ]


Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Kun je eens voorbeelddata laten zien, en abstract (stapsgewijs) vertellen hoe je algoritme (code) werkt en daarna uitleggen waar je precies vastloopt?

Je blijft het binary search noemen, maar dat lijkt me sterk voor een lijst met objecten. Die kan maar op één property zijn gesorteerd, dus als je "where" twee of meer properties doorzoekt, wordt het toch een O(n) waarin je de lijst van begin tot eind moet doorlopen en elke gevraagde property moet testen.

https://oneerlijkewoz.nl
Het ergste moet nog komen / Het leven is een straf / Een uitgestrekte kwelling van de wieg tot aan het graf


Acties:
  • 0 Henk 'm!

Anoniem: 80910

Topicstarter
CodeCaster schreef op zaterdag 15 juni 2024 @ 22:15:
Kun je eens voorbeelddata laten zien, en abstract (stapsgewijs) vertellen hoe je algoritme (code) werkt en daarna uitleggen waar je precies vastloopt?

Je blijft het binary search noemen, maar dat lijkt me sterk voor een lijst met objecten. Die kan maar op één property zijn gesorteerd, dus als je "where" twee of meer properties doorzoekt, wordt het toch een O(n) waarin je de lijst van begin tot eind moet doorlopen en elke gevraagde property moet testen.
ik liep vast, momenteel niet meer.

Had nog wel een dingetje met het gebruik van spatie/fork (parallel) met testen in combinatie met de SplFileObject, die laatste moest ik in elke thread opnieuw initieeren, anders had ik soms enkele records niet in het resultaat.

Je kan prima op meerdere properties sorteren, waarbij je eerst opzoek gaat naar de eerste property en daarna naar de volgende property.


Werkwijze:

- creeer indexes of laadt indexes
- laadt het hele bestand
- creeer sort key per object (alle velden van de where)
- sorteer data op sort key
- schrijf data per property naar een bestand (waarbij op dezelfde regel index zich een record bevind)
- bij het laden van het data bestand creeer ik een cache array met key = uuid en dan value het record object

- binarysearch het eerste record op de verschillende properties, beginnend bij de eerste where en vervolgens voor elke property de volgende where.

En dan volgens een bepaalde strategy haalt het de volgende records op, bijvoorbeeld eerst links van het gevonden object, daarna rechts

Bij die bestanden daar gebruik ik "seek" & "current" en als ie van de informatie genoeg informatie heeft verzameld voor de where, voer ik een where vergelijking uit. indien die where vergelijking niet false opleverd dan verijk ik het record met de gecachede data en ik gebruik een "expose" filter om voor de bepaalde rol eventueel properties niet mee te nemen.

Dus als je meerdere bestanden maakt en hetzelfde regelnummer aanhoud per record kun je dus ook meerdere vergelijkingen maken op meerdere properties.

Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Kun je kort omschrijven wat je aan het bouwen bent? Is dat een soort database engine (indexer plus query executor) voor JSON-bestanden, waarbij die JSON-bestanden van tevoren worden geïndexeerd, en de query door meerdere threads/processen worden uitgevoerd?

Voor een binary search moet je collectie gesorteerd zijn. Je gaat dus eerst alle indexen sorteren om ze daarna te doorzoeken?

Het is voor mij als buitenstaander lastig te begrijpen, ook met bovenstaande uitleg.

https://oneerlijkewoz.nl
Het ergste moet nog komen / Het leven is een straf / Een uitgestrekte kwelling van de wieg tot aan het graf


Acties:
  • 0 Henk 'm!

Anoniem: 80910

Topicstarter
daarom ben ik ook geen leraar...

het is inderdaad iets uit de hand gelopen.

Het begon allemaal met waar laat ik mijn database credentials en andere config gegevens en had besloten dat in JSON te doen want je kan er object in opslaan.

Ik ben een custom framework aan het bouwen en voor het framework zelf zijn indexes niet nodig, of het is een opgeslagen singleton, of ik heb meestal alle data nodig.

Het begon met een filter class voor de json en toen ik die werkend had leek mij een where functie ook leuk en handig.

Dit deed ie allemaal met een "foreach" en dan elk record met een where vergelijken.

Nu doet de where vergelijking er bijvoorbeeld 0.5 a 1 msec over per record dus bij bestanden met meer dan 1000 records doet ie er dan gelijk een seconde over.

Toen leek het me leuk om binarysearch weer toe te voegen, dus heb ik dit gedaan in eerste instantie voor 1 record.

Alleen bij de eerste keer van die binary search where, genereerd ie gesorteerde lijsten (de zoek tabellen (indexes), de eerste keer duurt dus iets langer omdat ie het hele bestand moet sorteren en opslaan.

die indexes sla ik op de tmpfs storage (ramdisk) zodat de ssd zo min mogelijk wordt belast.

stel de class heet "Account.Permission" en ik heb een where met "#class start 'Ac' dan geeft dat in dit geval alle records met de class "Account.Permission"

wat de binary search dan doet, is als een map, die open je in het midden en dan ga je kijken of je goed zit, naar links of naar rechts moet, en telkens pas je de min / max aan hiervan.

Omdat in mijn voorbeeld je alle records krijgt, kun je ook een strategy toepassen, waar rob en ik een discussie over hadden / hebben.

als ik in de cli de optie (geen flag) "-strategy=left-only" toe pas, heb ik momenteel het systeem uitgebreid met de optie (geen flag, das --) "-parallel".

Wat deze dan doet is het volgende:

ik heb een functie gemaakt "array_partition()" die alle "linksen" van het "gevonden record" verdeeld over het aantal threads (een soort array_chunk).

Dan ga ik met bijvoorbeeld 8 threads die lijsten doorwerken, haal eerst de "where gegevens" op, voer de where uit, indien niet false, haal record uit de cache en schrijf de complete lijst weg op de ramdisk.

Dat genereerd in dit geval 8 tijdelijke bestanden met de gewenste output van het record en die lees ik in en voeg ik samen. (opnieuw sorteren moet ik nog toevoeggen)

De package (r3m_io/node) kan via de commandline (cli) worden bedient en retourneerd dan valide json

Een voorbeeld van hoe dat er momenteel uitziet in de commandline:

Bash:
1
2
3
4
5
6
7
8
9
app r3m_io/node list -class=Account.Permission \
-page=1 \
-limit=100  \
-where[]="'#class' start 'Ac'" \
-where[]=and \
-where[]="'name' start 'task'" \
-strategy=left-only \
-index \
-parallel


- page = 1 (eerste pagina)
- limit = 100 (eerste 100 gevonden records maximaal)
-where (ik zoek dus de class "account.permission" met "start ac" een "name" die start met "task"
-strategy (welke records eerst: left-only)
-index (triggered binarysearch algorithm en creeert indexes indien nodig)
-parallel (voert nadat het eerste record met de hoofdthreat is gevonden, daana de left-only parallel uit)

Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Anoniem: 80910 schreef op zondag 16 juni 2024 @ 14:28:
Nu doet de where vergelijking er bijvoorbeeld 0.5 a 1 msec over per record dus bij bestanden met meer dan 1000 records doet ie er dan gelijk een seconde over.
Ik begrijp nog steeds te weinig van je aanpak en implementatie om iets te vinden van je indexerings- en zoekmechanisme. Het is sowieso een leuke vingeroefening, maar dan is het wel handig als je eerst het juiste probleem constateert.

Wat ik hier quote is een groot probleem.

Het is pertinent onmogelijk dat een simpele stringvergelijking een halve tot een hele milliseconde duurt. Of je meet verkeerd, of je code doet iets verkeerd, of je hebt strings van vele MB's, of je hebt een CPU die op een paar MHz draait.

Verder snap ik net als @RobIII niet wat je bedoelt met dat de gebruiker mag kiezen aan welke kant er verder gezocht moet worden, want een binary search dicteert per definitie of je naar links of rechts moet. Tenzij je een directe hit hebt, maar dan moet je aan allebei de kanten van de hit verder zoeken zolang er nog entries over zijn.

Als je bij "ABBBC" op de middelste "B" belandt, moet je naar links én naar rechts verder zoeken.

[ Voor 4% gewijzigd door CodeCaster op 16-06-2024 15:54 ]

https://oneerlijkewoz.nl
Het ergste moet nog komen / Het leven is een straf / Een uitgestrekte kwelling van de wieg tot aan het graf


Acties:
  • 0 Henk 'm!

Anoniem: 80910

Topicstarter
Het is de where vergelijking + het ophalen van het object in de cache en 'exposen' aan de hand van rol en een JSON bestand wat 0.5 - 1msec duurt. Met de binarysearch implementatie verminder je het aantal where elementen aan beide kanten totdat er false komt aan beide kanten.

De discussie ging over de strategy, stel je hebt 20 bbbb en je komt bij de een na laatste b, dan heb je verschillende resultaten met een verschillende strategy. Heb je een limiet van 10 op je query en hij doet eerst links, daarna rechts, dan heb je de laatste b niet (de binary search kwam op de een na laatste b) stel je hebt een property percentage, dan pakt ie altijd eerst de kleinere percentages, terwijl je bij een lage limiet wellicht de percentages rondom wilt.

Rondom kan niet parallel omdat je 1 per kant telkens berekend.

Omdat ik rondom niet parallel krijg ga ik 'eerst links dan rechts' default maken, want dat kan parallel.

Ik 'expose' nu per record, dat kan ik wellicht per lijst maken, maar dan wordt dat weer singlethreaded waarschijnlijk, maar wel sneller, hoef ik maar 1x de rol / permissie te controleren ipv bij elk record. Maar daar kom ik wel uit...

JSON:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{
  "uuid": "40156403-f331-4879-be6e-87bfc5ab3e03",
  "#class": "Account.Permission",
  "name": "System:Route:commit",
  "#duration": {
    "start": 1718571018.099276,
    "from_cache": 0.03719329833984375,
    "expose_get": 0.04792213439941406,
    "expose_function": 0.7789134979248047,
    "data": 0.0011920928955078125,
    "wait": 20.54882049560547,
    "where": 0.0400543212890625,
    "expose": 0.8680820465087891,
    "total": 0.9179115295410156
  },
  "#index": 308
}


meten is weten, dus expose is de boosdoener, dus heb nog wat te optimizen

( de duration waarden hierboven zijn in aantal msec )

heb ff een testje gedraaid:

op bestand met 618 records:

normaal door lijst: 360 msec ~ 400 records retour
binarysearch door lijst: 260 msec ~310 record retour
binarysearch door lijst parallel (8 threads): 110 msec ~310 records retour
binarysearch door lijst parallel (16 threads): 105 msec ~310 records retour
binarysearch door lijst parallel (16 threads zonder expose): 82 msec ~310 records retour
normaal door lijst (ramdisk cache) 56 msec ~400 records

zie ook dat simd_json nog uitstaat op die instantie, dus wellicht not wat meer winst, en max 4 GB bestanden denk ik...

De Cli initeren met het framework kost me momenteel 50 msec, das in de browser 11 msec dus 50 msec kun je nog van de waarden af halen (dat komt door mijn constructie om de wsl image op de d schijf te hebben, daardoor is ie langzamer)

$list = Parallel::new()->execute($closures); voert spatie/fork uit, mooie package

[ Voor 110% gewijzigd door Anoniem: 80910 op 16-06-2024 23:16 ]


Acties:
  • 0 Henk 'm!

Anoniem: 80910

Topicstarter
heb de expose verplaatst en voert nu uit op de lijst ipv individuele records.

JSON:
1
2
3
4
5
6
7
"#duration": {
        "boot": 56.79583549499512,
        "total": 80.43599128723145,
        "nodelist": 23.646116256713867,
        "item_per_second": 3841.563895154621,
        "item_per_second_nodelist": 13067.685054295769
    }


~ 310 records retour van de 618 in 80 msec

de onderste is als je nodeList executie tijd alleen neemt, zonder boot, heb helaas nog geen data om dit te testen, maar ziet er snel en veelbelovend uit (dit was met 6 threads), bedankt voor de tip voor optimalisatie, hij is nu over kleine aantallen 2x zo snel

Acties:
  • +1 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Ik heb geprobeerd mee te kijken in je code wat dit zou moeten doen, maar ik wil in de eerste plaats al protesteren tegen het feit dat ongeveer elke methode begint met de call naar het onvindbare $this->object(). Dan is er de Data trait die een soort klassen-met-properties-systeem bovenop PHP en JSON probeert te zijn? En expose() kopieert data uit interne structuren naar externe, maar niet alles, soms toch weer wel?

Ik heb het gevoel naar TempleOS te zitten te kijken en te veel sterveling te zijn om dit ooit te begrijpen wat hier gebeurt. Het gebrek aan comments en documentatie helpt niet.

https://oneerlijkewoz.nl
Het ergste moet nog komen / Het leven is een straf / Een uitgestrekte kwelling van de wieg tot aan het graf


Acties:
  • 0 Henk 'm!

Anoniem: 80910

Topicstarter
CodeCaster schreef op maandag 17 juni 2024 @ 12:49:
Ik heb geprobeerd mee te kijken in je code wat dit zou moeten doen, maar ik wil in de eerste plaats al protesteren tegen het feit dat ongeveer elke methode begint met de call naar het onvindbare $this->object(). Dan is er de Data trait die een soort klassen-met-properties-systeem bovenop PHP en JSON probeert te zijn? En expose() kopieert data uit interne structuren naar externe, maar niet alles, soms toch weer wel?

Ik heb het gevoel naar TempleOS te zitten te kijken en te veel sterveling te zijn om dit ooit te begrijpen wat hier gebeurt. Het gebrek aan comments en documentatie helpt niet.
Klopt, er is een framework class, 'app' die via $this-object() oproepbaar is. Daarin zit de config en een paar functies. Data is een trait in node, een class in het framework die ik op sommige plekken hebt hernoemt naar storage.

Expose krijgt een rol en heeft een object (Json) met daarin een lijst properties die per rol andere properties kan hebben.

Ik heb bewust weinig documentatie in de code gedaan en ben met de documentatie bezig en hoop in oktober de basis klaar te hebben en online te hebben en houden tegen die tijd. Het is allemaal wat uitgebreider geworden dan in eerste instantie gedacht. Wel leuk, maar heel veel werk...

Acties:
  • +1 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Voor m'n gevoel heb ik deze thread al 3 keer gelezen en ik begrijp nog steeds niet wat je nu aan het maken bent. Hoe ziet die json er uit, wat wil je nu bereiken en misschien simpelere vraag... waarom doe je dit niet met een RDBMS (desnoods SQLite)?

Acties:
  • 0 Henk 'm!

Anoniem: 80910

Topicstarter
Cartman! schreef op maandag 17 juni 2024 @ 15:20:
Voor m'n gevoel heb ik deze thread al 3 keer gelezen en ik begrijp nog steeds niet wat je nu aan het maken bent. Hoe ziet die json er uit, wat wil je nu bereiken en misschien simpelere vraag... waarom doe je dit niet met een RDBMS (desnoods SQLite)?
doctrine zit er ook in, en ik heb een json schema die eenphp doctrine entity genereerd, maar dat is nog onder constructie.

dit is "ook" en mijn configuratie is een json verzameling, zodat je bijvoorbeeld zonder mysql connectie nog iets in kan stellen. en het is leuk...

JSON:
1
2
3
4
5
6
7
"#duration": {
        "boot": 110.38422584533691,
        "total": 112.59317398071289,
        "nodelist": 2.215862274169922,
        "item_per_second": 3552.6132345156166,
        "item_per_second_nodelist": 180516.63438777707
    }


dit is de ramdisk cache, krijg je die snelheden ook met mysql ? en dus item_per_second_nodelist is het aantal records in de cache uitgedrukt in aantal per seconde

[ Voor 24% gewijzigd door Anoniem: 80910 op 17-06-2024 18:08 ]


Acties:
  • Beste antwoord
  • +5 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Je bent niet te volgen, full stop. Qua kennis zit je wellicht in mijn vakgebied, maar ivm de warrigheid van je posts is de kans 0 dat ik je kan helpen. Ik vrees dat zelfs Jochem Myjer jou niet bij houdt.

{signature}


Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Dus mijn advies: beperk de scope van wat je wil bespreken en schrijf dan rustig wat je vraag is. Dan nog paar keer lezen, ademoefening en nog een keer nalezen. :>

{signature}


Acties:
  • 0 Henk 'm!

Anoniem: 80910

Topicstarter
het is besproken en is beantwoord door rob en codecaster en dat wordt mijn default:

links eerst, daarna rechts, want mijn mooiere oplossing kan niet parallel, want die doet 1 voor 1...

[ Voor 25% gewijzigd door Anoniem: 80910 op 17-06-2024 18:04 ]


Acties:
  • +3 Henk 'm!

  • Oon
  • Registratie: Juni 2019
  • Niet online

Oon

Anoniem: 80910 schreef op maandag 17 juni 2024 @ 17:38:
[...]
dit is de ramdisk cache, krijg je die snelheden ook met mysql ? en dus item_per_second_nodelist is het aantal records in de cache uitgedrukt in aantal per seconde
Is performance je doel?

Een goed geconfigureerde MariaDB server met een goed geoptimaliseerde MySQL query en de juiste indexes zal een aantal factoren sneller zijn dan zoeken door JSONs, zelfs binnen een ramdisk.

Flatfile is gewoon langzaam, enorm veel overhead en niet geoptimaliseerd voor zoeken. Dan kun je de disk wel sneller maken, maar het moet toch van ramdisk naar gewoon geheugen om verwerkt te worden.

Even los van de vragen over wat dit voor vaag framework is en waarom je die in godsnaam zou gebruiken.. Ik zou lekker naar MySQL overstappen en je heel wat kopzorgen besparen.
Als je in MySQL gewoon een index hebt op de kolom die je doorzoekt dan zal die daar waarschijnlijk een B+-tree voor gebruiken, wat een stuk sneller is dan wat je nu doet. Combineer dat met wat efficiente CTE's om alvast voor te filteren en je kunt honderden miljoenen records verwerken in enkele milliseconden.
3500 items per seconden (of 180k? Weet niet welke je daadwerkelijke dataset is) is écht heel erg langzaam, ik zorg altijd dat mijn MySQL queries onder de halve seconde uitkomen, maakt niet uit hoe groot mijn dataset is of wat de zoekopdracht is. Zelfs met databases met meerdere tabellen met miljoenen records die aan elkaar gekoppeld worden is dat mij tot nu toe altijd gelukt.

Acties:
  • +2 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Paginering zonder sortering geeft willekeurige (ter discretie aan de database-engine) records terug, dus kies een strategie en vermeld die aan de consumers.

Het is niet te verklaren wat je code moet doen. Het is niet uit te leggen waarom expose() doet wat het doet en waarom het daar minstens tien (ik ben gestopt met tellen) geneste ifs en foreaches nodig heeft, laat staan de bakken met reflectie en stringmagie (al blijft het natuurlijk PHP)

Ten slotte is al helemaal niet te verklaren (of nou ja, op bovenstaande constateringen na) waarom je voor het filteren van een lijst van nog geen duizend entries zes threads en bijna een seconde nodig hebt.

Ga terug naar de tekentafel, en omschrijf in een paar logische zinnen wat je precies wil doen. Wil je properties van objecten filteren op basis van de daarop toegepaste permissies of zo? Schrijf een paar use cases met voorbeelddata (een handvol records is genoeg). Vertel welke records bij welke input in de output moeten komen en waarom. Schrijf unittests die dat bevestigen. Stop met micro-measurements.

https://oneerlijkewoz.nl
Het ergste moet nog komen / Het leven is een straf / Een uitgestrekte kwelling van de wieg tot aan het graf


Acties:
  • 0 Henk 'm!

Anoniem: 80910

Topicstarter
ik heb net gezegd dat het 80 msec betrof, maar goed ik hou op, in oktober is er documentatie voor de geinteresseerden...

Acties:
  • +2 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Wellicht leuk en leerzaam: https://dev.to/realflowco...-billion-rows-in-php-3eg0
Spoiler: 1 miljard rijen aggregeren in 12 seconden. Ik vind het artikel wel leuk geschreven, ook met de opbouw van naieve, overduidelijk correcte oplossing eerst, en dan per stuk de trucjes erbij halen,

{signature}


Acties:
  • 0 Henk 'm!

Anoniem: 80910

Topicstarter
Is ook maar net wat je nodig hebt. Ik heb objecten, vanuit de ramdisk is het json lezen, en deze genereerd objecten.

Ik maakte in mijn test nog geen gebruik van simd_json, wat het nog sneller maakt en geen gebruik van json line. Mijn ramdisk read is singlethreaded omdat ik dacht dat er een kleine limiet (2MB) in response van child proces na main threat ingesteld staat.

Ik kan daar nog naar kijken en dan multithreaded van de ramdisk lezen.

Ik kan ook kijken of opslaan als 'csv string' zoveel sneller is, dan ipv json, maar ik denk dat simd_json daarvoor gemaakt is en ik geen verdere exotische dingen hoef te doen.

Acties:
  • +2 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Laatst online: 11:14

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

Anoniem: 80910 schreef op dinsdag 18 juni 2024 @ 07:39:
Ik heb objecten, vanuit de ramdisk is het json lezen, en deze genereerd objecten.
Ik zie het probleem niet? Je kunt toch ook prima 'objecten' opslaan in een database? Hell, neem desnoods een Document database als MongoDB ofzo. Maar ik zie niet waarom een 'gewoon' RDBMS hier niet ook zou volstaan. Ik snap de drang naar JSON en ramdisks en moeilijk doen met multithreading en andere NIH zaken niet.

[ Voor 13% gewijzigd door RobIII op 18-06-2024 08:19 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Anoniem: 80910 schreef op maandag 17 juni 2024 @ 17:38:
[...]


doctrine zit er ook in, en ik heb een json schema die eenphp doctrine entity genereerd, maar dat is nog onder constructie.

dit is "ook" en mijn configuratie is een json verzameling, zodat je bijvoorbeeld zonder mysql connectie nog iets in kan stellen. en het is leuk...

JSON:
1
2
3
4
5
6
7
"#duration": {
        "boot": 110.38422584533691,
        "total": 112.59317398071289,
        "nodelist": 2.215862274169922,
        "item_per_second": 3552.6132345156166,
        "item_per_second_nodelist": 180516.63438777707
    }


dit is de ramdisk cache, krijg je die snelheden ook met mysql ? en dus item_per_second_nodelist is het aantal records in de cache uitgedrukt in aantal per seconde
Maar wat probeer je nu precies te maken hiermee? Is het een tool om data processing te doen? Wat voor soort data? Wie gaat dit gebruiken? Wat is het anders of beter dan bestaande oplossingen?

Als ik naar de code kijk word ik niks wijzer en heb ik zoveel vragen. Zo zie ik een mapje met honderden bestanden die soms wel of soms niet een wrapper is om bestaande PHP functies. Ook veel duplicate code (soms zelfs direct na elkaar) en een beetje half OOP en half spaghetti. Ik begrijp het niet helemaal :{

Acties:
  • 0 Henk 'm!

Anoniem: 80910

Topicstarter
dat mapje plugin is voor de parser, en wrap inderdaad daarin veel functies voor nu, wellicht kan ik er sommige /veel direct laten uitvoeren, maar das een middagje werk.

ik moet meerdere variabelen vergelijken.

ik heb wat tests gedraaid op mijn laptop (silence mode, dus geen fan) en die staan in de readme van de repository: https://github.com/r3m-io/node/

Haal vanaf ramdisk dus 500.000 objecten maximaal per seconde, maar dat komt ook omdat ik forks gebruik en geen threads. omdat getal omhoog te krijgen moet ik uitwijken naar php thread safe en de module pthread uitproberen.

Het genereerd namelijk json objecten naar php objecten in de main thread. en mijn laptop haalt dus single threaded 581.763 stuks per seconde.

Mijn doel is om er een cms systeem mee te maken, zodat men op een makkelijke manier meerdere websites tegelijk in 1 systeem kunnen beheren (dus heb mijn doel allang bereikt)

Acties:
  • +2 Henk 'm!

  • Kheos
  • Registratie: Juni 2011
  • Laatst online: 13:40

Kheos

FP ProMod
Anoniem: 80910 schreef op donderdag 20 juni 2024 @ 18:52:
Mijn doel is om er een cms systeem mee te maken, zodat men op een makkelijke manier meerdere websites tegelijk in 1 systeem kunnen beheren (dus heb mijn doel allang bereikt)
Maar waarom geen DB?

Acties:
  • +2 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Anoniem: 80910 schreef op donderdag 20 juni 2024 @ 18:52:
ik heb wat tests gedraaid op mijn laptop (silence mode, dus geen fan) en die staan in de readme van de repository: https://github.com/r3m-io/node/
Ik denk dat niemand hier ene hout van begrijpt. Als je configs wil opslaan in json doe je dat toch lekker gestructureerd, dat kan immers gewoon.
Haal vanaf ramdisk dus 500.000 objecten maximaal per seconde, maar dat komt ook omdat ik forks gebruik en geen threads. omdat getal omhoog te krijgen moet ik uitwijken naar php thread safe en de module pthread uitproberen.
Als performance een issue is, is dat dan niet een teken dat je beter iets kunt gebruiken wat zich al lang en breed bewezen heeft ipv allemaal kunstgrepen en exotische extensions te gaan gebruiken? Je kunt zware berekeningen en/of zware queries misschien cachen met bijv Redis.
Het genereerd namelijk json objecten naar php objecten in de main thread. en mijn laptop haalt dus single threaded 581.763 stuks per seconde.
Wat is een real world scenario dat je dit gaat renderen op een website? Ik begrijp het echt niet. Het klinkt alsof een website ook bij iedere toevoeging die iemand doet langzamer zal worden omdat er meer records zijn, dat kan toch niet de bedoeling zijn?
Mijn doel is om er een cms systeem mee te maken, zodat men op een makkelijke manier meerdere websites tegelijk in 1 systeem kunnen beheren (dus heb mijn doel allang bereikt)
Er zijn toch al tig CMS-en waar dit mee kan? Wat is het de beperking waar je tegen aan bent gelopen dat jouw framework oplost? Watt is er precies "makkelijk" aan nu? Kijk anders eens naar Drupal hoe zij dit opgelost hebben.

[ Voor 7% gewijzigd door Cartman! op 20-06-2024 22:10 ]


Acties:
  • +4 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Anoniem: 80910 schreef op donderdag 20 juni 2024 @ 18:52:
dat mapje plugin is voor de parser, en wrap inderdaad daarin veel functies voor nu, wellicht kan ik er sommige /veel direct laten uitvoeren, maar das een middagje werk.

ik moet meerdere variabelen vergelijken.

ik heb wat tests gedraaid op mijn laptop (silence mode, dus geen fan) en die staan in de readme van de repository: https://github.com/r3m-io/node/

Haal vanaf ramdisk dus 500.000 objecten maximaal per seconde, maar dat komt ook omdat ik forks gebruik en geen threads. omdat getal omhoog te krijgen moet ik uitwijken naar php thread safe en de module pthread uitproberen.

Het genereerd namelijk json objecten naar php objecten in de main thread. en mijn laptop haalt dus single threaded 581.763 stuks per seconde.

Mijn doel is om er een cms systeem mee te maken, zodat men op een makkelijke manier meerdere websites tegelijk in 1 systeem kunnen beheren (dus heb mijn doel allang bereikt)
Waarom wil iedereen die een beetje heeft leren programmeren toch altijd z'n eigen CMS maken en daarmee een vierkant wiel opnieuw uitvinden?

Bij iedere vraag van de klant, bij iedere bug, bij iedere nieuwe feature moet je aan het werk om aan je CMS te gaan sleutelen in plaats van dat je een kant-en-klare oplossing van de plank pakt, het werk van een ander toepast, een bewezen oplossing gebruikt.

Als je nieuwe code schrijft, wanneer je een library publiceert, móet dat vergezeld gaan van een pitch, een verkoopverhaal dat in één of een paar zinnen vertelt waarom mensen voor jouw oplossing zouden moeten gaan, wat je toevoegt aan de vele andere oplossingen die er al bestaan.

Tot nu toe heb ik dat niet gezien, behalve losse kreten als "meerdere websites in één systeem beheren", en "permissies opslaan". Dat zijn de enige zaken die op functionele eisen lijken. De rest, zoals JSON, where, loops, ramdisks, binary search, zoekstrategieën en aantal records per seconde, zijn mogelijk interessant, maar feitelijk ruis. Ze gaan je niet helpen het klantprobleem op te lossen, het zijn problemen die je zelf hebt veroorzaakt.

Het lijkt erop dat je, bij elk probleem dat je tegenkomt bij het bouwen van deze oplossing voor dit slecht gedefinieerde probleem, het nieuwe probleem wil oplossen door het toevoegen van meer code, waaruit nieuwe problemen ontstaan. Op deze manier raak je nooit uit de vicieuze cirkel van het toevoegen van meer code en zal je oplossing nooit af zijn.

Ramdisks, multithreading of zelfs meerdere processen en eigen filter-framework voor het lezen van de configuratie zouden onderaan je lijstje moeten staan van oplossingen voor het probleem van "een multi-tenancy-systeem met instellingen per gebruiker/site".

Het lijkt misschien dat we hier met z'n allen vervelend lopen te doen en je oplossing afkraken, maar zo ver zijn we niet eens, want we zijn in de eerste plaats oprecht benieuwd naar welk oorspronkelijke probleem je nou probeert op te lossen en hoe je oplossing er in grove lijnen uitziet.

Zoals ik hier al schreef:
CodeCaster schreef op maandag 17 juni 2024 @ 18:09:
en omschrijf in een paar logische zinnen wat je precies wil doen. Wil je properties van objecten filteren op basis van de daarop toegepaste permissies of zo? Schrijf een paar use cases met voorbeelddata (een handvol records is genoeg). Vertel welke records bij welke input in de output moeten komen en waarom. Schrijf unittests die dat bevestigen. Stop met micro-measurements.
En ga jezelf niet aan arbitraire tijdslijnen houden hiervoor. Wat nou "documentatie komt in oktober", een docblock met "wat doet deze functie, wat gaat erin en wat komt eruit" schrijf je voor, tijdens of hooguit direct na het schrijven van die functie, niet maanden later.

https://oneerlijkewoz.nl
Het ergste moet nog komen / Het leven is een straf / Een uitgestrekte kwelling van de wieg tot aan het graf


Acties:
  • 0 Henk 'm!

Anoniem: 80910

Topicstarter
Ik zie de db's als losse instanties en die zijn er wel maar de configuratie zit in dit systeem. Dit systeem is waarschijnlijk niet bedoeld voor vele records, maar voor objecten, maar daar wil ik ook dit systeem niet voor inzetten.

Waarom geen bestaande oplossing zoals drupal, joomla, umbraco, omdat ik wil kijken naar mijn eigen oplossing zonder te veel afhankelijk te zijn van andere projecten.

Ik had wellicht sqlite kunnen gebruiken, maar koos toen voor json bestanden (6 jaar terug). Mijn parser kan ook json bestanden parsen, waardoor er hele andere mogelijkheden zijn.

Ik ben in ieder geval tevreden voor nu.

Acties:
  • 0 Henk 'm!

  • Kheos
  • Registratie: Juni 2011
  • Laatst online: 13:40

Kheos

FP ProMod
Anoniem: 80910 schreef op vrijdag 21 juni 2024 @ 07:54:
Ik zie de db's als losse instanties en die zijn er wel maar de configuratie zit in dit systeem.
Waarom?
Anoniem: 80910 schreef op vrijdag 21 juni 2024 @ 07:54:
Dit systeem is waarschijnlijk niet bedoeld voor vele records, maar voor objecten, maar daar wil ik ook dit systeem niet voor inzetten.
Waar wil je het dan wel voor inzetten?
Anoniem: 80910 schreef op vrijdag 21 juni 2024 @ 07:54:
Waarom geen bestaande oplossing zoals drupal, joomla, umbraco, omdat ik wil kijken naar mijn eigen oplossing zonder te veel afhankelijk te zijn van andere projecten.
Waarom? Waarom het wiel opnieuw uitvinden, maar dan minder goed?
Anoniem: 80910 schreef op vrijdag 21 juni 2024 @ 07:54:
Ik had wellicht sqlite kunnen gebruiken, maar koos toen voor json bestanden (6 jaar terug).
Waarom? In welke usecase zijn Jason bestanden beter dan db's?
Anoniem: 80910 schreef op vrijdag 21 juni 2024 @ 07:54:
Mijn parser kan ook json bestanden parsen, waardoor er hele andere mogelijkheden zijn.
Om wat te doen? Parsen om dan wat met de data te doen?
Wat doe je met die json's?

[ Voor 13% gewijzigd door Kheos op 21-06-2024 08:39 ]


Acties:
  • +1 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Anoniem: 80910 schreef op vrijdag 21 juni 2024 @ 07:54:
Ik zie de db's als losse instanties en die zijn er wel maar de configuratie zit in dit systeem. Dit systeem is waarschijnlijk niet bedoeld voor vele records, maar voor objecten, maar daar wil ik ook dit systeem niet voor inzetten.

Waarom geen bestaande oplossing zoals drupal, joomla, umbraco, omdat ik wil kijken naar mijn eigen oplossing zonder te veel afhankelijk te zijn van andere projecten.

Ik had wellicht sqlite kunnen gebruiken, maar koos toen voor json bestanden (6 jaar terug). Mijn parser kan ook json bestanden parsen, waardoor er hele andere mogelijkheden zijn.

Ik ben in ieder geval tevreden voor nu.
Een multi-tenancy-systeem heeft vaak nog een aparte, gedeelde database voor de configuratie, dus daar je globale configuratie in bewaren was een mogelijke oplossingsrichting geweest.

Qua JSON is het gangbaar om een klassenstructuur te maken die de JSON-structuur representeert, en dan iets als Symfony Serializer (of een van de andere populaire libraries die dit kan):

PHP:
1
$config = serializer->deserialize($someJson, YourSettings::class, 'json');


En dan kun je met één regel code een paar maanden werk skippen en bevat $config gewoon een geinstantiëerde klasse, gevuld met de JSON-data uit de $someJson-string.

Daarna kun je eventueel een functie in die YourSettings-klasse maken die de search doet die je lijkt te zoeken.

Afhankelijk zijn van andermans code, zolang die maar goed gedocumenteerd en onderhouden wordt, is geen last. Je eigen code schrijven voor elk probleem, dát is een tijdverslindend probleem (zie ook de "Not Invented Here (NIH)" die @RobIII eerder aanhaalde).

https://oneerlijkewoz.nl
Het ergste moet nog komen / Het leven is een straf / Een uitgestrekte kwelling van de wieg tot aan het graf


Acties:
  • +1 Henk 'm!

Anoniem: 80910

Topicstarter
ChatGPT

What is faster, json or sqlite

ChatGPT

The performance comparison between JSON and SQLite depends on the context in which they are used, particularly in terms of data storage and retrieval. Here are key points to consider:

JSON (JavaScript Object Notation):

Use Case: Primarily used for data interchange and storage in a file.Speed: Parsing and generating JSON can be quick for small to moderately sized datasets. However, searching and updating specific elements within a large JSON file can be slow since it often requires loading the entire file into memory.Flexibility: JSON is highly flexible and human-readable, making it ideal for configuration files or data interchange between systems.

En ik gebruik het voor configuratie, waarom geen redis, memcache, ik koos ramdisk.

Als je de db's configuratie wil aanpassen op een makkelijke manier.

Configuratie van de doctrine db entities.

Waarom minder goed? Omdat ik spijkers gebruik ipv schroeven...

Ik wil een framework & cms systeem gaan bouwen en onderhouden en verkopen in de toekomst. Ik wil geen websites bouwen en verkopen.

Het wordt geen multi tenancy systeem. Het wordt een cms waarin je meerdere domeinen en subdomeinen kan beheren op 1 of meerdere servers.

Ik maak geen gebruik van een .env file, maar van json.

De reden dat ik geen database afhankelijkheid initieel wil, het systeem moet zonder db connecties nog toegankelijk zijn, zodat je de configuraties kan aanpassen.

Ik maak gebruik van enkele goede packages, zoals monolog, doctrine, symfony/mailer en nog een paar voor jwt en encryptie.

Sommige dingen vind ik leuk om zelf te maken, dus daarom. Ik ben afgekeurd en heb een hobby en probeer een product te maken die ik kan onderhouden en verkopen op den duur.

De validatie zit bij mij in een json bestand.
De blootstelling per rol zit in een json bestand.
De configuratie zit in meerdere json bestanden.
De entity schema's zitten bij mij in een json bestand en aan de hand daarvan creëert die de db tabellen en entity classes.

Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Anoniem: 80910 schreef op vrijdag 21 juni 2024 @ 09:26:
Ik ben afgekeurd en heb een hobby en probeer een product te maken die ik kan onderhouden en verkopen op den duur.
Dat is een heel mooi streven natuurlijk, hulde daarvoor _/-\o_

Echter (een mooie "maar") als je dit wil verkopen zou ik toch eens kijken naar hoe de buren dit doen en zoveel mogelijk gebruik maken van wat ze bieden. Je kunt je dan focussen op hetgeen wat jouw product uniek maakt ipv jaren bezig te zijn met de fundering om erachter te komen dat deze niet geschikt is om een huis op te bouwen.

Acties:
  • 0 Henk 'm!

Anoniem: 80910

Topicstarter
Cartman! schreef op vrijdag 21 juni 2024 @ 11:23:
[...]

Dat is een heel mooi streven natuurlijk, hulde daarvoor _/-\o_

Echter (een mooie "maar") als je dit wil verkopen zou ik toch eens kijken naar hoe de buren dit doen en zoveel mogelijk gebruik maken van wat ze bieden. Je kunt je dan focussen op hetgeen wat jouw product uniek maakt ipv jaren bezig te zijn met de fundering om erachter te komen dat deze niet geschikt is om een huis op te bouwen.
bedankt.

Jou argument heb ik toen gebruikt om naar de bestaande frameworks te kijken en tot de conclusie gekomen dat die (symfony, laravel) niet makkelijk zijn om een cms in te bouwen.

Alle routes daar zitten bijvoorbeeld in code en bij mij is dat gescheiden in json. en zo zijn er nog wel meer voorbeelden waarom ik toen gekozen heb om mn eigen pad te bewandelen.

Het voordeel van een eigen framework is minder vloeken en indien nodig is een code wijziging zo gemaakt.

Het framework is een hulpmiddel en heeft tegenwoordig een aantal packages, die via een install command & composer, installeerbaar zijn.

de Grootste 'class' in json zijn momenteel de configuratie (verspreid over meerdere json bestanden) en de permissies.

aantal object < 2000 maar toch leuk om even te testen met 1 miljoen object omdat ook een beetje do-able te maken.

Waarom geen mongo db, de minimale systeem eisen zijn 4 cores, en ik wil minimaal 1 core aanhouden

Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Of Laravel je smaak is, kan je over twisten. Maar voor een 1-pitter is het voordeel van alles hapklaar echt niet te overschatten.

Maar als je dan ook nog alle Symfony legosteentjes (welke Laravel ook stevig gebruikt) links laat liggen..

Je meet jezelf een enorme handicap aan. Het is supercool om bepaalde componenten die je eigen toegevoegde waarde zijn te hebben, maar al dit spul is dat niet.

Waarom dat uitmaakt? Al je concurrenten profiteren er wel van. Je kan er nooit van winnen. Het nadeel van eigen framework is dusdanig groot dat ook de volgende copilot sprong deze niet teniet kan doen voor je.

Serieus, elke 18 jarige die maar met halve tijd wél Laravel omarmt zal goedkoper, sneller, beter zijn. Sorry.

{signature}


Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Uiteraard niet leuk om te horen als je al zoveel stukken framework hebt. Maar ik meen het echt dat de gezonde, financieel betere keuze is om dat als een leuke oefening/ leergeld te beschouwen. Je zit op een dood spoor en het allergemeenst zou zijn om dat niet eerlijk te zeggen.

{signature}


Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Anoniem: 80910 schreef op vrijdag 21 juni 2024 @ 11:52:
[...]


bedankt.

Jou argument heb ik toen gebruikt om naar de bestaande frameworks te kijken en tot de conclusie gekomen dat die (symfony, laravel) niet makkelijk zijn om een cms in te bouwen.
Dat klopt, Symfony en Laravel zijn geen CMS-en maar die kun je er wel mee bouwen. Een kant en klaar CMS als bijvoorbeeld Drupal doet wel out of the box wat je wilt.
Alle routes daar zitten bijvoorbeeld in code en bij mij is dat gescheiden in json. en zo zijn er nog wel meer voorbeelden waarom ik toen gekozen heb om mn eigen pad te bewandelen.
Je kunt in een route ook variabelen gebruiken en dan in je database iets opzoeken. Maar je kunt ook prima een hele wildcard maken van je route en alles uit de database halen qua routes. Die opties zijn ook gedocumenteerd.
Het voordeel van een eigen framework is minder vloeken en indien nodig is een code wijziging zo gemaakt.
Maar het grote nadeel is dat je voor elk klein dingetje maanden bezig bent om eigen packages te maken en te onderhouden.
Het framework is een hulpmiddel en heeft tegenwoordig een aantal packages, die via een install command & composer, installeerbaar zijn.

de Grootste 'class' in json zijn momenteel de configuratie (verspreid over meerdere json bestanden) en de permissies.

aantal object < 2000 maar toch leuk om even te testen met 1 miljoen object omdat ook een beetje do-able te maken.

Waarom geen mongo db, de minimale systeem eisen zijn 4 cores, en ik wil minimaal 1 core aanhouden
Ik denk dat je veel te veel focus hebt op het parsen van een json bestand. Maak een logische hiërarchischestructuur aan, daar kun je denk ik veel verder mee komen dan alles proberen op te lossen met een query van records.

Als je hier mee wil doorgaan moet je dat natuurlijk gewoon doen maar verwacht niet dat er maar iemand is die erop zit te wachten, laat staan ervoor wil betalen. Harde realiteit maar wel hoe het zit...

[ Voor 5% gewijzigd door Cartman! op 21-06-2024 12:24 ]


Acties:
  • 0 Henk 'm!

  • Oon
  • Registratie: Juni 2019
  • Niet online

Oon

Anoniem: 80910 schreef op vrijdag 21 juni 2024 @ 11:52:
[...]


bedankt.

Jou argument heb ik toen gebruikt om naar de bestaande frameworks te kijken en tot de conclusie gekomen dat die (symfony, laravel) niet makkelijk zijn om een cms in te bouwen.

[...]
Hoewel het natuurlijk heel leuk knutselen is kan ik je na zelf ook ooit gedacht te hebben dat ik beter een eigen CMS kon maken twee belangrijke tips meegeven;

- Als eerste, er is geen hond op de wereld die jouw codebase gaat gebruiken. Jijzelf kan er vast wat leuks mee, maar je eigen CMS is nooit de juiste keuze voor een serieus project, en voor iemand anders gaat dit al helemáál nooit de juiste keuze ijn.

- Als tweede; je bevindt je overduidelijk nog in het begin van je leerpad vwb PHP (of development in het algemeen), doe jezelf een plezier en leer meteen moderne design patterns aan. De reden dat al die moderne frameworks ongeveer hetzelfde op ongeveer dezelfde manier doen is omdat dat is wat gewoon heel goed werkt met de huidige variant van het wijde web. Er is een reden dat er standaarden zijn, en met daar tegenin gaan omdat je die standaarden niet snapt snij je jezelf alleen in de vingers. Hoe sneller je één framework als Laravel of Symfony leert begrijpen, hoe sneller je ze allemaal kent. Mocht je dan toch nog je eigen CMS willen bouwen op je volledig eigen codebase, dan kun je dat in ieder geval op een gezonde, gestructureerde en weloverwogen manier doen.


Lees dit overigens niet als afkraken, ik kan me nog goed herinneren dat ik aan het begin van mijn carriere in jouw schoenen stond en dacht het allemaal zelf het beste te weten. Ik heb heel wat CMSen 'from scratch' gebouwd voor klantprojecten omdat ik dacht dat dat sneller was dan Laravel of Symfony (laat staan WordPress of Drupal) gebruiken, maar die zijn uiteindelijk allemaal de prullenbak in beland en vervangen door iets dat efficienter en onderhoudbaarder is.

Je hebt heel wat ideeën die gewoon niet praktisch zijn, niet nuttig zijn, of niet kloppen. De beste keuze die je op dit beginpunt van je leerproces kunt maken is eerst eens kijken naar hoe ervaren developers het doen, want die hebben deze fouten allemaal al gemaakt en zijn het (ondanks de flinke ego's in de ICT-wereld) uiteindelijk een keer eens geworden over wat lekker werkte. Dat zegt toch wel wat, en daar kun je heel veel van leren.

Acties:
  • 0 Henk 'm!

Anoniem: 80910

Topicstarter
ik ben van plan om zoiets als umbraco (maar dan in php) te bouwen, ik bouw al heel lang in php en heb gewerkt met symfony & laravel, hence ik heb een web to print oplossing gebouwd in 2007 waarmee geautomatiseerd 500 miljoen euro aan incasso brieven zijn verstuurd.

Ik heb met symfony 20.000 verschillende type enquete's geimporteerd naar een symfony systeem met meer dan 8.000.000 respondenten.

Ik heb vroeger de website van spareribexpress gebouwd en 3 jaar onderhouden en moest toen in de tussentijd een custom cms ervoor bouwen.

aan de structuur heb ik ook aandacht gegeven.

Ik snap dat er niet veel mensen mijn framework gebruiken of gaan gebruiken, maar dat vind ik niet belangrijk, gebeurd het wel, leuk meegenomen.

Ik wil graag een cms ontwerpen omdat ik denk dat ik dat kan en kan verkopen aan een paar honderd / paar duizend klanten.

Om zo mijn volgende project te financieren

welke moderne design patterns moet ik me aanleren en waarom ?

Mijn code is aardig efficient, hij laadt de basis in de browser in 11 msec.

Ik kan mijn code goed onderhouden en upgraden.

Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Anoniem: 80910 schreef op vrijdag 21 juni 2024 @ 12:45:
Ik wil graag een cms ontwerpen omdat ik denk dat ik dat kan en kan verkopen aan een paar honderd / paar duizend klanten.
Wat is je unique selling point waarom ze dit bij jou gaan kopen?

Verder denk ik dat het niet heel veel zin heeft verder te discussieren, je lijkt een beetje blind te zijn voor het commentaar en advies hier. Dat is prima maar verwacht dan (zoals in andere topics) ook niet een oplossing voor je gestelde vragen.

Acties:
  • 0 Henk 'm!

Anoniem: 80910

Topicstarter
Ik ben niet blind voor commentaar!

Daarnaast ging je commentaar over spaghetti code, dat vind ik niet en uit jou voorbeeld ook niet.

De plugins worden momenteel ingeladen in een te fabriceren en te compileren php class en ik gebruik daar nog geen reflectie voor om te zien wat ik nodig heb. Daarom is het momenteel beperkt tot 1 functie per plugin en dienen de meeste class calls absoluut gemaakt te worden in de plugin functies.

Daarnaast bevat dit topic veel commentaar zonder onderbouwing, suggesties etc en het antwoord is al gegeven op het onderwerp.

En mijn unique selling point is nog niet bekend, maar ik hou data gescheiden van code, dus ook de routes zit in json. Ik kan me nog herinneren dat de auteur van symfony een probleem had met een paar duizend routes, dat zal waarschijnlijk in mijn code en data redelijk snel zijn.

Mijn code draait op een 1 euro kostende server per maand met 1 GB ruimte en een email adres

[ Voor 25% gewijzigd door Anoniem: 80910 op 21-06-2024 18:20 ]


Acties:
  • +2 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Laatst online: 11:14

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

Anoniem: 80910 schreef op vrijdag 21 juni 2024 @ 17:16:
Ik ben niet blind voor commentaar!
Je hebt tot nu toe nog ontzettend nette reacties gehad met opbouwende kritiek, suggesties en tips. Maar er is veel onbegrip over-en-weer, dat is wel duidelijk. Wat begon als een vraag over een (implementatiedetail van een) binary search is vervolgens uit de bocht gespind naar een discussie over JSON, databases, configuratiebestanden, 'benchmarks', pro's en con's van al-dan-niet-eigen frameworks, pageload tijden, servers met X cores en Y geheugen en ga zo nog maar even door...

Ik denk dat we de conclusie moeten trekken dat we op een andere golflengte zitten. Ik ga het topic niet sluiten, ik ga de discussie(s), zolang alles netjes blijft, niet afkappen, maar wil je wel de kans geven dit moment even te nemen en te reflecteren. Ben je misschien niet iets té geïnvesteerd in je project? Of misschien teveel gefocust op een optimalisatie die de kosten/baten weegschaal de verkeerde kant doet uitslaan?

[ Voor 9% gewijzigd door RobIII op 21-06-2024 18:28 . Reden: Quote toegevoegd ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

Anoniem: 80910

Topicstarter
ik ben gewoon mijn eigen software momenteel aan het benchmarken en ik denk dat het een waarde heeft van minimaal 1 miljoen in totaal, of dat zich terugverdient vind ik niet interessant tot op de hoogte, zal wel een vakantiewoning in spanje erbij willen hebben, das mijn doel en ieder z'n weg.

Heb ook een 2 leuke domeinnamen om een portal voor backpackers te maken, maar ik weet dat dat te veel tijd gaat kosten momenteel (ik denk voor mijzelf 2030). dus bedacht ik een oplossing, ik kan wel een cms systeem bouwen en aan elke aannemer verkopen zodat ze hun eigen sites kunnen beheren, het is een idee, of het wat gaat worden en hoever ik kom. zoals ik al zei ik ben afgekeurd maar wil wel wat te doen hebben op een dag...

ik had ook nog een ajax oplossing in 2008/2009 om een windows server met photoshop erop te instrueren en wachten op het resultaat, was leuk toendertijd veel vakantie kaartjes mee geprint. dat koste toendertijd 4000 euro per server bij adobe, met mij konden ze schalen indien nodig maar was waarschijnlijk even duur...

Wellicht de verkeerde hobby gekozen.

ik zou zeggen probeer de docker container, kijken of die draait,

clone de docker repository:

Bash:
1
git clone https://github.com/r3m-io/docker


Ga naar de gekloonde directory en draai in de terminal
Bash:
1
./install.dev.sh


en dan installeert ie als het goed is...

Maar ja, ik loop achter met de documentatie en ik hoop versie 1 in oktober klaar te hebben, zoniet wordt het april, ik kan momenteel niet goed een tijdschatting maken van mijzelf...

over het gezonken schip, meeste werkt al stabiel en heeft geen last van de diverse packages, dus kan per package nu programmeren en indien nodig in het framework.

waarom ik daar tijd aan spendeer is omdat ik dat uit mijn werk ervaring heb gehaald. ik ben begonnen te programmeren zonder bestaande frameworks en had toen samen met collega's een eigen framework gemaakt, wat voor ons handig werkt.

Daarna met drupal wel eens een site gemaakt (upgrade hel ?)

Daarna een eigen framework 3 jaar aan gewerkt en dat was in het begin niet makkelijk bij een werkgever.

Daarna met symfony enquetes verwerkt voor 5 jaar, upgrade hell, maar goed gedocumenteerd en sommige dingen in mijn ogen te snel deprecated / weggehaald. form hell, ajax hell in het begin.

Daarna begonnen thuis met eigen software dacht ik makkelijker te kunnen werken op den duur, ik alles kan tweaken naar mijn gevoel en expressie.

tevens was ik bang om niet mee te kunnen gaan in de upgrade cyclus van andere frameworks

In de tussentijd een template engine ontwikkeld die ook json templates aan kan (unique selling point) en ik middels templates nu commands laat uitvoeren:

code:
1
2
{{R3M}}
{{Package.R3m.Io.Name:name.definition.get(flags(), options())}}


een template is een commando en het commando is een functie in een php trait en de flags en de options van het commando worden meegestuurt, ik vind dat bijvoorbeeld een mooie oplossing (die nog niet bestond)

In de trait (php) is de functie naam name_definition_get($flags, $options){}

het is hobby, ik denk dat ik redelijk kan meekomen, ik heb met enquete's importeren verschrikkelijke code moeten ontcijferen. ik probeer leesbare duidelijke code te schrijven.

En dit is json wat execute:
JSON:
1
2
3
4
5
6
7
8
9
10
11
12
{
  "#program": "...",
  "#user": "{{user.login('...', '...')}}",
  "#config": {},
  "#parallel": [
    "{{microtime(true)}}",
    "..."
  ],
  "#output" : {
    "filter": "..."
  }
}

dit logt je in, voer de parallel code uit, dit kunnen plugins (functies) of traits zijn, waarbij je vrij bent te gebruiken wat je wil. #parallel wordt op het eind uitgevoerd en daarna de verplichte output filter die #parallel kan retourneren, (de # properties worden dan bijvoorbeeld gefilterd), dit gebruikt spatie/fork

Toevallig las ik dit op Reddit:

https://www.reddit.com/r/webdev/s/mGgY8emskV nog een selling point, ik denk dat ik binnenkort update scripts met ai kan doen en ik wou voor mijn cms een abbonement hebben rond de 80-100 euro per jaar, maar goed mijn target is 2027-2028, Das nog even... En Das prijzig voor een versie update: ~$2500, hoeveel kost WordPress up to date houden gemiddeld?

[ Voor 63% gewijzigd door Anoniem: 80910 op 22-06-2024 13:58 ]


Acties:
  • 0 Henk 'm!

  • DaFeliX
  • Registratie: December 2002
  • Laatst online: 15-05 14:38

DaFeliX

Tnet Devver
Anoniem: 80910 schreef op vrijdag 21 juni 2024 @ 19:16:
ik ben gewoon mijn eigen software momenteel aan het benchmarken en ik denk dat het een waarde heeft van minimaal 1 miljoen in totaal, of dat zich terugverdient vind ik niet interessant tot op de hoogte, zal wel een vakantiewoning in spanje erbij willen hebben, das mijn doel en ieder z'n weg.

[...]
Ik denk dat iedereen dat wel zou willen. Wij als programmeurs denken dan dat je degelijke software moet opleveren om waarde te creëren. En ik heb respect voor je dat je het zo wilt doen, en begrijp heel goed dat je liever alles zelf bouwt _/-\o_

Toch zou ik 'ns nadenken of je technical debt wilt inzetten; om met minimale inspanning zo veel mogelijk resultaat te behalen en kijk dan of iemand het wil kopen. Op die manier kun je heel veel verschillende projecten proberen, totdat er een succes tussen zit. Dat lijkt mij een eenvoudigere manier van het proberen van snel rijk te worden, dan heel erg lang heel veel tijd te besteden aan 1 product; dat dan geen succes word.

Oftewel, in plaats van heel lang oefenen op dat perfecte schot op het dartbord, gooi zo veel mogelijk pijltjes en er zal er vast eens eentje in de roos belanden.

Er is een reden dat succesvolle bedrijven vaak technical debt hebben: ZIj waren eerder dan de concurrenten op de markt en hadden het voordeel om als eerste te kunnen groeien.

Einstein: Mijn vrouw begrijpt me niet


Acties:
  • 0 Henk 'm!

Anoniem: 80910

Topicstarter
ik heb de boel nu verder geoptimaliseerd en heb getest met 1.000.000 objecten.

Zo kwam ik erachter dat sommige dingen anders doen / verdelen snelheidoptimalisaties met zich meebracht.
Bij het genereren van de index methode, haalde ik bijvoorbeeld flinke snelheidswinst door eerst json strings te maken en deze dan in 1 keer achter elkaar weg te schrijven ipv in een loop de json string te maken en direct weg te schrijven.

ik ben er ook achter gekomen dat parallel (forks) in ieder geval bij deze hoeveelheden meestal langzamer is, dan het gewoon op 1 core uitvoeren alhoewel bij veel resultaten toch snelheidswinst te zien is.

Sommige dingen moeten op 1 core worden uitgevoerd, maar dat was al eerder besproken (dan moet ik de zts versie van php gaan gebruiken)

JSON:
1
2
3
4
5
6
7
{
                "uuid": "6772b357-85df-482c-b24d-13f3b9d6622e",
                "#class": "Account.Permission",
                "name": "permission:1",
                "file": "{{config('project.dir.data')}}Test\/node.md",
                "description": "{{file.read($this.file)}}"
},


hier test ik het parsen van het object, eerst duurde dat 20 seconden voor 200 objecten, en nu voor 200 objecten en een file.read functie 2,11 seconden (dat is inclusief authorisatie).

Zonder parsen 235 msec voor 200 objecten (8 forks).
Zonder parsen 273 msec voor 200 objecten (1 thread)

met parsen 3,949 seconden voor 200 objecten (1 thread)

Kijk ik vind het bijvoorbeeld handig dat ik bijvoorbeeld op deze manier documentatie bij een permissie kan zetten in markdown syntax.

Bedankt voor de tip, ik zal eens kijken wat ik wil verkopen en wat niet.

Voor mijn te ontwikkelen cms wil ik een goede basis en die is bijna "af".

Ik heb mijn keuze voor json een aantal jaren geleden gemaakt. als ik er nu op terugkijk zou ik wellicht sqlite ook gebruikt kunnen hebben en was het achteraf misschien makkelijker geweest.

Ik wilde het eerst makkelijker maken voor mijzelf en dat is soms best uitdagend.

Ik vind externe software updaten een pain in the *** .

ik wilde graag een cms bouwen en zag dat de meeste frameworks daar niet geschikt voor zijn en dan zit je al snel aan zelfbouw te denken.

Wat is makkelijker, data wijzigen of code wijzigen ?

Nu ik mijn "node" voor json objecten onder de knie begin te krijgen kan ik die gaan inzetten als "tasks" en met een taskmanager de boel up2date houden.

Doordat ik een parser heb gebouwd die ook json aan kan (smarty kon dit bijvoorbeeld niet / niet goed) en templates verzorgt, doe ik inderdaad veel mijzelf.

Ik heb in 2015 bijvoorbeeld een javascript prototype library gebouwd die ik nog steeds gebruik, want heb niet meer nodig. (dus ipv jquery of iets anders)


Als wellicht de code door anderen gebruikt wordt in de toekomst, kan ik ondersteuning bieden wellicht.


Maar ik loop een beetje achter met documentatie, daar ben ik nu mee bezig en met testen van code / optimaliseren van code.

En omdat het best veel is geworden, wat ik in eerste instantie niet had verwacht.

Heb bijvoorbeeld 382 plugins momenteel, daar moet ook allemaal documentatie bij (ook voor mijzelf)

En ik vind dat ik degelijke software maak.

Ik heb ook met react mogen werken en met nodejs, maar dat vond ik onnodig complex voor frontend.

Mijn eigen oplossing is veel simpeler en meer jquery achtig. Daarnaast ben ik niet vies van een pure javascript oplossing.

Ik heb momenteel een paar ideeen, zodra ik weer meer frontend werk doe komen er allemaal apps. sommige houdt je basis, andere kun je dan uitbreiden en dan wellicht in de markt zetten...

Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Ga eerst er eens iets mee maken voor de praktijk en kijk of het werkt voor jezelf. Volgens mij snapt niemand er hier iets van wat je nu precies aan het doen bent ook en de kans is vrijwel nul dat iemand anders dit wil gaan gebruiken. Tenzij je het voor jezelf wil hebben zou ik de documentatie dan ook lekker achterwege laten.

Acties:
  • 0 Henk 'm!

Anoniem: 80910

Topicstarter
Nee de documentatie wil ik wel, ook met enkele voorbeelden. Niet van elke functie, wel van elke ingang, configuratie en het kost weinig moeite.

Over 2 jaar ben ik de helft anders vergeten, wil ook niet alles onthouden...

Stel enkele bedrijven gaan het gebruiken en ik geef support.

In de tussentijd heb ik mijn eigen projecten die nog wat meer tijd kosten.

Ik wilde een goede basis en dat onderhouden kost weinig moeite. Installeerbaar maken kost ook weinig tegenwoordig en veel dingen zijn research geweest.

Ik heb bijvoorbeeld alle routes in een json bestand zitten (data) en die kan ik straks in mijn cms makkelijk aanpassen, dat kan met php attributes niet makkelijk zoals in symfony of php bestanden in laravel, enkele voorbeelden waarom zelfbouw op de lange termijn beter houdbaar is.

En overal reflectie voor inzetten is ook een keuze maar mijn routes kunnen ook naar een html bestand verwijzen of pdf.

Mijn javascript is bijna als htmx.

Acties:
  • +2 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Laatst online: 11:14

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

Anoniem: 80910 schreef op zondag 7 juli 2024 @ 20:50:
Ik heb bijvoorbeeld alle routes in een json bestand zitten (data) en die kan ik straks in mijn cms makkelijk aanpassen, dat kan met php attributes niet makkelijk zoals in symfony of php bestanden in laravel, enkele voorbeelden waarom zelfbouw op de lange termijn beter houdbaar is.
Ik vraag me echt af hoe je omgaat met dingen als concurrency enzo als je alles in JSON bestanden hebt staan. Wat als 2 mensen op het "zelfde moment" mutaties maken in je data en het valt (toevallig) binnen hetzelfde bestand? Ik zie echt met geen enkele mogelijkheid het voordeel van "json, json everywhere" t.o.v. een RDBMS of document-DB. Je hebt er ontzettend veel werk mee om alles zelf te bouwen, je optimaliseert je suf en dan nog haal je cijfers waarvan elk willekeurig RDBMS (of document-DB of...) je voorbij spurt in diverse ordegroottes. Wat heb je dan gewonnen? En belangrijker: wat heb je allemaal ingeleverd?

[ Voor 3% gewijzigd door RobIII op 07-07-2024 21:13 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • +2 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Anoniem: 80910 schreef op zondag 7 juli 2024 @ 20:50:
Stel enkele bedrijven gaan het gebruiken en ik geef support.
Ik probeer dit echt vriendelijk te zeggen; dit gaat gewoon niet gebeuren dus hou er vooral geen rekening mee. Geen enkel bedrijf gaat hierop inzetten want je kunt niet bieden wat bestaande grote frameworks wel bieden. Denk aan een steady release cycle, bugfixes en community Support.
Ik heb bijvoorbeeld alle routes in een json bestand zitten (data) en die kan ik straks in mijn cms makkelijk aanpassen, dat kan met php attributes niet makkelijk zoals in symfony of php bestanden in laravel, enkele voorbeelden waarom zelfbouw op de lange termijn beter houdbaar is.
Je kunt dit uitstekend maken met de genoemde frameworks, je hebt alleen de moeite nog niet genomen om uit te vinden hoe. Zelfbouw is juist op de lange termijn minder houdbaar want je loopt altijd achter de feiten aan.
En overal reflectie voor inzetten is ook een keuze maar mijn routes kunnen ook naar een html bestand verwijzen of pdf.
Waarom zou n ander framework dit niet kunnen?

Acties:
  • 0 Henk 'm!

Anoniem: 80910

Topicstarter
Heb je gekeken naar de minimale systeem eisen van mongo db ? die raden minstens 4 cores aan. ik wil mijn cms gaan inzetten op 1 core minimaal.

ik hou er ook geen rekening mee, ik hoop met mijn cms te scoren. wellicht een beetje reclame tegen die tijd.

Er zullen geen mijarden objecten zijn, dus waar praten we over in een gemiddele website van een klein bedrijf.

ik kan zeker wel bugfixes aan en mijn release cycle is 2x per jaar, oktober - april en ik verwacht dan als ik support ga leveren, de klant op de laatste versie zit.

ikzelf wil het gaan gebruiken voor mijn projecten en voor mijn backend project gebruik ik het al.

Die index had niet gehoeven want zo gebruik ik json nog niet, maar was wel een leuke oefening en is het nog steeds.

concurrency wil ik oplossen door van writes tasks te gaan maken waarschijnlijk, die doet dan per type op de achtergrond, momenteel gebruik ik lock files en dat bevalt met 1 user prima en dat task de user dan wordt krijgt ie een queue.
En zoals ik al zei, ben afgekeurd maar wil wel leuke dingen te doen hebben, de snelheid is prima waar ik het voor gebruik

Ik heb al met symfony en laravel gewerkt, maar ik vind mijn eigen werk prettiger op den duur, kwestie van gewenning.

ik heb bijvoorbeeld ook een doctrine schema in json zitten, aan de hand van die source of truth genereerd ie de doctrine entity classes (php) en een database migratie (sql). pas je de data aan (het doctrine schema in json) dan genereerd ie opnieuw entity classes en een database migratie)

Ik zat er zelf aan te denken om eerst de oude tabel te hernoemen naar _old (config) en dan de nieuwe te maken en de records erin te importen zodat je altijd nog een restore point hebt (old weer hernoemen...)

Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Je blijft n beetje hangen in je reacties, vooral niet luisteren naar (goedbedoelde) kritiek en industrie best practices maar alles anders en custom waardoor niemand het begrijpt. Ik wens je veel succes ermee.

[ Voor 26% gewijzigd door Cartman! op 07-07-2024 22:50 ]


Acties:
  • 0 Henk 'm!

  • ThomasG
  • Registratie: Juni 2006
  • Laatst online: 17:46
Ik mis vooral een duidelijke use-case. Het kan technisch nog zo geweldig zijn, maar als het niet duidelijk is waarom en wanneer je het moet gebruiken, dan gaat niemand het gebruiken.

Wat voor probleem lost dit systeem op? En wat zijn de voordelen vergeleken met andere systemen? Ik lees bijvoorbeeld dat je het op een langzamere CPU alsnog snel wilt laten werken, maar wat is de performance vergeleken met andere CMS'en op zo'n CPU?

Je bent nu leuk aan het programmeren met de hoop om er later veel geld mee te verdienen. Ik gun het je van harte, maar helaas lijkt er nog geen duidelijke businesscase te zijn. Dat is niet handig voor jezelf, potentiële gebruikers en/of investeerders.

Acties:
  • 0 Henk 'm!

Anoniem: 80910

Topicstarter
De use case voor json is configuratie van het systeem

- autoload configuratie
- monolog loggers
- ramdisk configuratie
- cors configuratie
- doctrine configuratie van meerdere db connecties
- email configuratie
- server configuratie

Dan
- events
- middleware
- routes
- hosts
- installatie van packages

- doctrine schema's om entities te genereren en migraties bij te houden

Dan heb ik nog basis configuratie in een json bestand zitten met:
- framework default routes
- versie
- file content types
- file extensies
- parser configuratie

Daarnaast nog een package.json met daarin de te installeren optionele en verplichte packages.

Daarnaast bijvoorbeeld vertalingen.

En dan ben ik nog bezig met accounts, die zowel in sql als json kunnen zitten (de admins in json zodat ze de doctrine configuratie (sql verbindingen) kunnen aanpassen via het te ontwikkelen cms.

Json behandel ik als data / parseable data wat aanpassingen makkelijker maakt ipv code wijzigen.

De parseable json wordt bijvoorbeeld voor templates gebruikt waarin scripts / links staan gedefinieerd, eventueel website specifieke elementen als menu / navigatie.

Deze basis is dus voor mijn cms die ik wil gaan verkopen.

Ik vind het een mooie basis geworden...

Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Je hebt zo'n bekende businessguru, Jos Burgers, die een ondernemer die boren verkoopt vertelt dat zijn klanten helemaal geen boren willen.

Wat willen die klanten dan? Gaten.

Boren zijn slechts een hulpmiddel om tot dat doel te komen. Hetzelfde lijkt bij jou het geval te zijn met je CMS. Je hebt iets bedacht waar je trots op bent, en dat is prima, lovenswaardig zelfs, sowieso knap dat je dit gebouwd hebt.

Waar jouw potentiële klanten in ieder geval gegarandeerd niet naar op zoek zijn, is:

• binary search
• 382 plugins
• framework default routes
• ramdisk configuratie
• server configuratie

En al het andere dat je noemt, wat allemaal implementatiedetails zijn waarmee je een klant niet moet willen vervelen.

Die klanten (die mogelijk zijn geholpen met een CMS) willen maar één ding: een snelle website die makkelijk te bewerken is qua teksten, afbeeldingen, pagina's en URL's. Kan jouw CMS dat? Mooi.

Kan het dat beter dan andere CMS'en? Waarom?

[ Voor 10% gewijzigd door CodeCaster op 08-07-2024 12:14 ]

https://oneerlijkewoz.nl
Het ergste moet nog komen / Het leven is een straf / Een uitgestrekte kwelling van de wieg tot aan het graf


Acties:
  • 0 Henk 'm!

Anoniem: 80910

Topicstarter
En daarom gebruikt iedereen WordPress.

Ik wil gewoon een cms verkopen waarmee je websites kunt beheren.

Ik wil geen WordPress websites verkopen

Ik wil geen drupal websites verkopen.

Het moet gewoon een makkelijk systeem worden, waarmee de schilder, de bakker etc zijn eigen site kunnen beheren of iemand daarvoor inhuurt.

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Laatst online: 11:14

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

Goed, het gaat inmiddels al láng niet meer om de vraag. Laten we hier stoppen voor 't vervelend wordt.

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij

Pagina: 1

Dit topic is gesloten.