Die Idee finde ich gar nicht schlecht. Habe ein bisschen recherchiert. Ich muss auf den User filtern und ich brauche die Sortierung von neu nach alt. Den User kann ich über den Partition Key abbilden und für die Sortierung nach Timestamp gibts wohl nen Trick:
var rowKey = (DateTime.MaxValue.Ticks - Timestamp.Ticks).ToString("d19")
Scheint auf den ersten Blick genau das abzudecken, was ich benötige. Dank dir!
meine Cloud App loggt aktuell User Daten, welche auch für den User relevant sind, in eine Azure SQL Table. Hier fallen pro Tag etliche 10k Einträge an. Für meine User sind diese Logs sehr wichtig und sie können diese in einer tabellarischen Ansicht auf der Website einsehen.
Von der Struktur sieht die Tabelle so aus:
ID UserId Timestamp Type Message Exchange
Die Anwendung zieht die Daten, gefiltert nach User, via Entity Framework sortiert von neu nach alt aus der DB. Es sind entsprechend auch Indexe gesetzt, nur leider verschlechtert sich der Index schon nach 1 - 2 Wochen immer wieder, da soviel neue Einträge stattfinden, was letztendlich zu Performance Problemen führt. Manchmal dauern einige Queries 1-5 Minuten.
Ich suche nun nach einem anderen performanteren Ansatz die User Daten zu loggen. Ich hatte an eine Document DB wie Cosmo gedacht. Könnt ihr mir mit den Mitteln die Azure bereitstellt eine gute Alternative raten? Denn ich möchte ja auch einigermaßen kosteneffizient bleiben. Aktuell hätte ich nur die Möglichkeit ne fettere DB bereitzustellen, was nicht gerade günstig ist.
For the record: Ich hab diesen Anwendungsfall tatsächlich recht gut mittels Git Submodules lösen können. Ein push vom Submodule landet dann im jeweiligen Repo des Services und wird dann nach dem Merge auf den Master automatisch von der GitLab CI Pipeline verarbeitet.
Ich hab eine Haupt-Solution, welche die unterschiedlichen Services zusammenfasst, die per Submodule referenziert sind. Dadurch bin ich in der Lage alle benötigten Services in der Entwicklung gleichzeitig zu starten und zu debuggen. Ziemlich komfortabel.
Einzige Wermutstropfen ist, dass Visual Studios Git Integration damit nicht mehr umgehen kann. Das löse ich über die CommandLine oder GitKraken.
Bravo! Super Arbeit. Man könnte meinen ihr habt ein paar erfahrene Berater in euren Reihen, die erfolgreich eine Legacy App ins Jahr 2019 portiert haben ;-)
Kennen tun sich die Services nicht. Aber für den Entwicklungs-Workflow finde ich es super smart, wenn ich beispielsweise das Frontend, die API und nen Worker-Service zusammen starten kann. Dann lade ich im Frontend eine Datei hoch, die API verarbeitet diese und legt eine Nachricht auf den Service Bus, worauf hin sich der Worker Service die Nachricht greift und ich bin überall in der Lage in diesen Workflow zu debuggen.
Daher stimme ich dir zu, ich will dahin jeden Servcie separat in einem eigenen Repo abzulegen, aber gleichzeitig diesen Entwicklungs-Workflow beibehalten. Wie würdest du sowas konkret lösen?
Danke für den Hinweis. Kann Visual Studio damit denn umgehen und funktioniert die Git Integration dann noch wie gewohnt? Also, dass Visual Studio die commits in die entsprechenden submodule absetzt, wenn ich die Haupt-Solution auf habe?
Folgendes vereinfachtes Szenario: Ich habe mehrere Services in meiner Visual Solution. Dies gibt mir den großen Vorteil mehrere oder alle Services gleichzeitig zu starten und auch zu debuggen.
Nun möchte ich gerne eine CI / CD Pipeline basierend auf GitLab aufbauen, die bei jedem Checkin neue Docker-Images meiner Services baut. Nachteil hier ist, dass mir nun alle Services neu erstellt werden, wobei ich vielleicht nur einen von zehn verändert habe, da sie alle in einer Solution liegen.
Daher meine Frage: Gibt es Ansätze beide Vorteile zu verbinden? Alle Services in einer Solution fürs debugging und gleichzeitig eine CI / CD Pipeline, die nur die geänderten Services erstellt?
Ich bin mir nicht ganz sicher, ob es das ist was du suchst: aber im Grunde ist es doch nichts anderes als das was in der OWIN Pipeline von ASP.NET stattfindet. Du fügst dort die unterschiedlichen Authentication Provider hinzu, wie Google, Facebook oder eben ein AD. So wie in diesem Beispiel: Link
Im Frontend könntet ihr dann zur Darstellung chartJS verwenden. Dabei spielt es dann keine Rolle, ob das Ganze in einem größeren JS Framework wie Angular läuft oder einer einfachen HTML + Javascript Anwendung.
Woher wissen die einzelnen API´s, das dass Token gültig ist? Ich nehme an, der IdentityServer muss nicht bei jedem Request gefragt werden.
Doch. Genau das muss geschehen.
Wenn ihr nicht zwingend das Ganze als Self-Hosting betreiben müsst, dann wäre es durchaus eine Überlegung wert mal die Dienste von https://auth0.com/ anzuschauen. Damit schützt du deine APIs / Services mit sehr geringen Aufwand. Einfach mal ein paar Tutorials dazu anschauen. Es ist wirklich einfach einzurichten.
Blockchain als Basis ist nicht mehr wegzudenken; egal ob nun bei Währungen der Zukunft oder bei technischen Umsetzungen wie börsenloser Energiehandel.
Ganz genau. Ethereum im Bereich der Smart Contracts oder BitShares im Bereich des Börsenhandels haben das Potential ganze Industriezweige grundlegend zu revolutionieren. Und jeder kann nach wie vor daran teilhaben und aktuell noch sehr günstig investieren.
Zitat von Abt
Die Frage bei Crypto Currency ist eher, ob es Bitcoin sein wird oder nicht.
Ich persönlich glaube, dass Bitcoin - aufgrund der auch hier diskutierten Schwächen - es nicht werden wird. Da sehe ich eher Coins wie Monero technisch im Vorteil. Allerdings bin ich überzeugt davon, dass sich Crypto Currencies mittel- bis langfristig durchsetzen werden. Was das für einen Impact hätte, kann man sich nur schwer vorstellen. Ein Kapitalismus der keine Banken mehr braucht...
Erstaunlich. Auch über 3 Jahre später erfreut sich Bitcoin größter Beliebtheit. Trotz der hinlänglich bekannten Schwächen. Auch wenn es heißt, dass diese zeitnah angegangen werden sollen. Es scheint ganz so, dass sich Bitcoin aufgrund dessen, dass diese Währung als erste am Markt war, nach wie vor einen großen Wettbewerbsvorteil erarbeitet hat. Auch wenn es mittlerweile technisch deutlich bessere Alternativen zu Bitcoins gibt. Ich bin sehr gespannt, wie sich das alles weiter entwickeln wird und wie lange sich Bitcoin halten kann.
Nichtsdestotrotz ist die Blockchain Technologie einer der größten Boom Märkte des IT Sektors und ich denke wir stehen hier noch ganz am Anfang. Wer sich hier frühzeitig mit beschäftigt und klug investiert, kann mittel- bis langfristig sehr viel Geld verdienen.
HTML und CSS haben tatsächlich wenig mit dem Windows Forms Layout zu tun. Ich kann dir auch CSS Flexbox ans Herz legen. Einen guten Einstieg findest du hier:
Ansonsten lohnt es sich auch sehr mal einen Udemy Kurs zu Bootstrap zu kaufen und den mal in Ruhe durchzuarbeiten. Danach sollte dir das Ganze Thema deutlich leichter fallen.
OData ist nicht einfach eine Json API, sondern ein Hypermedia-Protokoll.
Das ist mir durchaus bewusst. Dennoch finde ich den Ansatz von MS eigentlich sehr smart mit einem einfachen ApiController gewisse OData Funktionalitäten zu bekommen, ohne extra einen vollwertigen OData Endpunkt aufsetzen zu müssen. Schade nur, dass eine so wichtige Funktionalität wie der inlinecount nicht unterstützt wird. Wäre ja eigentlich ein leichtes gewesen die Untersützung auch für diese einfache Json Api mitzuliefern. Aber gut, mit etwas eigenem Aufwand ist es ja auch zu lösen.
quasi alle Resourcen-Systeme in Azure verwenden OData
Genau das ist der springende Punkt. Sobald man einen ApiController und keinen ODataController verwendet, hat man nicht mehr die Möglichkeit per Query Option die Gesamtgröße der Datenmenge mitzubekommen.
Hier für die Nachwelt noch mal meine Lösung, da ich sie etwas von dem Beispiel abwandeln musste:
public async Task<IHttpActionResult> GetData<MyData> options /* ggf. weitere Parameter*/)
{
var result = // Daten abrufen von UnitOfWork, DbContext, etc.
int count = result.Count;
IQueryable results = options.ApplyTo(result.AsQueryable());
return Ok(new PageResult<MyData>(results as IEnumerable<MyData>, new Uri("next-page-uri"), count));
}
ich versuche seit einiger Zeit vergeblich ein vernünftiges Paging mit der Web Api zum laufen zu bekommen. Folgendes Szenario:
Ich habe ein Website die per Ajax Call Datensätze von einer Web Api abruft. Dabei kommt mir sehr zu gute, dass ich die Query Optionen die man auch unter OData hat nutzen kann. Also beispielsweise $orderby, $skip und $top. Allerdings sehr großes Manko an dieser Sache ist, dass die überaus wichtige Option $inlinecount=allpages anscheinend nicht richtig unterstützt wird.
Daher kann ich auf der Website kein vernünftiges Paging umsetzen, wenn ich nicht weiß wie groß die Gesamtdatenmenge ist. Ich hab einige Blogartikel zu dem Thema gefunden, wo die Leute auf eine selbstgebastelte Lösung gesetzt haben. Finde ich aber sehr unschön, da ich in den meisten Fällen so die Möglichkeit verliere die Query Optionen zu verwenden. Und extra für sowas einen OData Endpunkt aufsetzen zu müssen, würde ich sehr gerne vermeiden wollen.
Daher meine Frage: Hat schon mal jemand erfolgreich einen Paging Ansatz umgesetzt? Muss ja irgendwie möglich sein. Wie sollen sonst die ganzen modernen Single-Page Webanwendungen sonst einen Web Api erfolgreich konsumieren?
Wieso nicht einfach mal auf ausgeschriebene Stellen bewerben (bzw. vorstellen lassen durch Personalvermittler) und konkret nach einem Teilzeit-Modell fragen?
Ich stehe aktuell auch vor dem Problem eine Menge CRUD Backend-Websites implementieren zu müssen. Ich habe deine Idee dazu noch nicht zu 100% verstanden, wie es gelingen soll hierfür ein möglichst einheitliches wiederverwendbares System zu schaffen. Kannst du das ein wenig näher erläutern? Und hast du in der Zwischenzeit hier schon an ersten Versionen gearbeitet?
ich habe durch eine fehlgeschlagene Replikation eines MySQL Servers, auf Dateiebene wo die Datenbanken abgelegt sind, etwa 750.000 Dateien. Dies führt dazu, dass sich der MySQL nicht neustarten lässt, da er alle Dateien scannen will.
Gleichzeitig ist es mir unmöglich mit dem Windows Browser den Ordner zu betreten und in dem Zuge dann die Dateien zu löschen. Hat jemand ne Idee wie das möglich wäre?