
RavenDB Database Internals - with Oren Eini
Durée: 53m13s
Date de sortie: 11/08/2023
In this episode, I had the pleasure of speaking with Oren Eini about RavenDB and diving deep into the world of database internals. We explore the intricacies of how databases work under the hood and discuss the challenges - especially around performance.Oren Eini, also known as Ayende Rahien, is the Founder and CEO of RavenDB, a leading NoSQL document database management platform, empowering both startups and Fortune 500 companies. With over 20 years of software development experience and bus...
Bonjour tout le monde, bienvenue à l'Unhandled exception podcast.
Je m'appelle Dan Clark et c'est épisode 55.
Aujourd'hui, je suis jointé par Owen Aynie et nous allons parler de database internals.
J'espère que ce sera quelque chose que nous pouvons faire dans l'audio-only podcast,
en enversant la base database d'internaux.
Bienvenue à la show, Ami.
Merci d'avoir me. J'ai hâte d'être ici.
Bienvenue.
Vous êtes le CEO et le founder de RavenDB,
un database en ligne.net, je crois,
qui est assez cool. Je ne veux pas dire que c'est un podcast, mais c'est probablement.
Vous pouvez vous interagir les listeners et vous dire un peu plus sur ce que vous faites.
Bienvenue.
Bonjour. Mon nom est Owen et je suis travaillé sur le database pour les années 20-25.
A bout de 15 ans, j'ai été très hâte d'avoir souffert
d'un autre issue de base database.
J'ai eu cette vision de « je veux avoir un database parfait »
et j'ai eu une vision de « je veux avoir un database parfait »
et j'ai eu une vision de « je veux avoir un database parfait »
Je dois dire que je suis travaillé sur le database code.
Je pense que c'est ma idée de « je veux avoir un nightmare »
Je pense que tout le monde est à la fois en train de faire des trucs différents.
Le hardware et le software,
le nombre de séquences complexes que l'utilise peut avoir.
Vous commencez à commencer, vous vous mentionnez le hardware
et vous réalisez qu'il faut être le plus simple possible
de faire un « je veux avoir un database parfait »
et vous vous mentionnez le « je veux avoir un database parfait »
et vous vous mentionnez le « je veux avoir un database parfait »
et vous vous mentionnez le « je veux avoir un database parfait »
et vous vous mentionnez le « je veux avoir un database parfait »
et vous vous mentionnez le « je veux avoir un database parfait »
et on peut vraiment vraiment faire comme un code de database,
vous devez savoir comment faire un écrit officiellement sur le disque
par passer toutes ces caisses et les baffes en milieu,
ce qui se passe très bien,
car c'est pour cela que le disque est lent.
Et quand je dis que le disque est lent, je ne parle pas de
ce que vous savez, ce que vous avez dans votre laptop de gramma,
je parle de la discurse moderne, et elles sont lentes,
parce que les CPUs sont plus vite, les monnaies sont plus vite,
et que vous avez, oh, je dois persister à la date,
ok, ceci est maintenant une toute nouvelle order de magnitude
dont je dois opérer.
Et il se trouve que la C-Shop a une bonne partie
d'unes des features vraiment intéressantes pour le écrit en code de la basse,
et que ce soit des types de valeur, des codes de la suite, des pointes,
et je parle de cette façon de discrétation
sur la C-Shop, comme elle était envisée en 2000,
parce que je l'ai travaillé sur la C-Shop depuis le début.
Et dans les années 80 ou 10, il y a eu un nombre grand de travail
pour faire la C-Shop dans une langue de plus bas,
c'est-à-dire la spénification du framework,
ce qui est en train de faire des tristings,
mais même en regardant la C-Shop 1.0,
c'est une langue qui était très explicielle
et qui a une puissance très importante.
Et qui a une possibilité d'intégrer les details de la basse.
Même en regardant la basse, le écrit en disque,
les algorithmes que vous pouvez utiliser,
je ne sais pas si vous avez besoin d'un B-Tree,
pour savoir comment se déployer le data,
comment écrire.
Et puis vous avez tous les problèmes que vous avez parlé
de le writing dans la disc,
et puis des choses comme la collection de galbex,
vous devez penser à toutes ces choses,
il y a beaucoup de choses différentes.
La collection de galbex a été une grande bainte dans notre existence,
parce que l'éventuellement, le bain de galbex vient,
et vous êtes en processant 1000 transactions par seconde.
Ok, c'est bien, ce n'est pas un grand défi,
mais chaque transaction génère des galbesx,
et à un moment vous devez faire un cycle de GCC,
ce qui signifie que c'est ce qui va arriver,
le cycle de GCC dit, ok, arrête le monde,
rien ne s'arrête, je suis en train de crever ici,
et puis vous retournez en sortant.
Maintenant, cela signifie deux très graves problèmes.
La première chose est que vous n'avez pas l'obligation
d'avoir une système de state stupide.
Je dirais que je suis en train de faire 100 transactions par seconde,
et chaque un de ces deux doit procéder 10 ms de temps.
Chaque minute ou deux, quand le galbex s'est trop grand,
je vais avoir un stop de la location.
Un stop de la location signifie que,
ok, un numéro de requête par seconde,
le salaud de la drogue, le jump de la latence,
très très haut, et vous le voyez très bien
quand vous regardez les métergies,
et vous regardez les métergies P99.
Chaque minute ou deux,
je vais avoir une grande pique de latence,
quelque chose que je ne veux pas faire.
Un autre aspect ici,
c'est que si vous avez un salaud sérieux,
et que vous égalez un grand nombre de galbesx,
ou même la structure de votre objectif est expensive,
et cela signifie que maintenant vous allez
prendre 30 secondes en gc.
Et si vous vous avez prendre 30 secondes en gc,
alors, qu'est-ce que vous allez faire au niveau du monde au-delà?
C'est comme si vous étiez mort.
Donc, d'autres compagnons en castes
qui disent qu'on doit se séduire,
prendre des responsabilités,
faire des lectures, des trucs comme ça.
Et quand nous commençons à écrire le RVNDB,
le design de RVNDB
était juste une application ASP.
Révissez en IS,
et utilisez l'architecture MVC.
C'est en fait comme classique,
comme vous pouvez le voir,
quand nous allons s'occuper de ce système,
et nous présenter avec un meilleur mécanisme
pour l'opération de Query.
Et à un moment, nous avons assez de choses,
que ces issues que j'ai mentionnés,
ont commencé à nous imposer,
et quand vous avez besoin de rassembler,
et de savoir quelle est la performance du système,
et de commencer à mettre un cashier,
ou ici, c'est la histoire.
Nous avons élevé le cash pour éviter de rentrer au RVNDB,
parce que ce que nous allons faire est super expensif.
Donc, nous avons un cashier,
et ce cashier, nous serons en train de déclencher
des documents comme JSON-Streams.
Donc, en avant de déclencher le data,
on a déjà élevé le cashier.
Donc, nous allons le porter comme un objectif JSON-PALSE.
Alors, on est bien,
et nous avons joué au benchmark,
et tout le monde est heureux.
D'accord, on va en avoir un cas de délégation.
Alors, on va en avoir un cas de délégation,
et on va en avoir un cas de délégation,
et on va en avoir un cas de délégation,
et on va en avoir un cas de délégation,
et on va en avoir un cas de délégation,
et on va en avoir un cas de délégation,
et on va en avoir un cas de délégation.
Et on va en avoir un cas de délégation,
et on va obedient brings현 to
defeated.
C'est du jury quirok.
C'est notre ch Canvas.
qui signifie que je suis effectivement arrivé à un point où ralentir sans la cache est plus rapide
parce que le GCC n'est pas allé pour beaucoup d'adhésion
et ensuite vous réalisez aussi que la structure de vos méthodes documentaires
si vous avez un objectif complexe
le cours du GCC est léger à la quantité d'objets que vous avez
on est en train de faire un problème en utilisant le local de trait
le local de trait est difficile à expérimenter en utilisant l'audio mais essayez d'imaginer
une messe de pointes qui pointent à l'un à l'autre et c'est un système complexe
spécial, il y a beaucoup de trait et beaucoup d'objets
donc à ce point on a en fait décidé de savoir que si je crée beaucoup de trait de trait
dans beaucoup de trait, je m'aimais de prendre plus de 50% de mon temps
juste de tracé le trait de l'objectif et ensuite je réalise que je dois y collecter
comme résultat de ça, à partir de 2015, on a commencé avec une nouvelle architecture de l'AVNDB
et cette architecture était en fait un an de connaître ces problèmes que je parlais de
donc en fait, plutôt que de rédiger plus tard ou seulement sur la mémoire de la mémoire de GCC pour
prendre ça, on a déclaré que la plupart des mémoires utilisées au sein de l'AVNDB sont en fait
une mémoire de mémoire qui est contrôlée explicitement par l'AVNDB.
Donc l'idée ici est de prendre la mémoire qui est utilisée par une réquestée
donc ce que j'ai envie de faire et en ce cas, la réquestée est presque toujours une
courte opération, donc je suis allé au bout du point, au bout de la fin de la réquestée,
je suis allé par un truc appelant Bump Allocator, j'ai, on dirait 2MB de buffer,
et chaque fois que je dois l'allocer, je vais prendre le prochain hightail de ce buffer.
Et en fin de la réquestée, je n'ai pas besoin de faire de quoi que ce soit de la réquestée,
je ne fais que le dernier position allocée, le buffer à la première,
et ce qui est bien de ce que je peux, c'est que à ce point,
je suis capable de réutiliser le même buffer pour le prochain request.
Et ça a signé en termes que l'amount de faute que la GCC a à faire
est massivement réduite. On a aussi introduit beaucoup de travail avec la mapping de la mémoire,
donc en avant de réutiliser le data sur le disque, et puis on est capable de juste accéder
par point, maintenant, vous avez toujours à réutiliser pour ça, c'est juste que l'opératif
système ne fait pas ça pour vous, en utilisant des formes de paix, mais ensuite il y a la prochaine partie
de ce qui est, en avant de détenir le data sur JSON texte sur le disque, on est en fait en train de
mettre en place un document qui est minible pour être procédé par une procédure de 0,
ce n'est pas bien. Vous dites, donnez moi le nom de la propriété du document de cette particularité,
donc vous faites un lookup à l'intérieur du database et ça me donne le point à ce document
en mémoire, c'est en fait un point à l'aise de la disque, mais parce que c'est en train de
bouger, je ne peux pas le voir directement, c'est un point. À chaque point, j'ai le buffer qui représente
le document et maintenant je suis capable de faire, sans pas en faire, ce whole poteshi, un très grand document,
je suis capable de juste monter le ref, le nom de la suite et obtenir ce valeur directement et ça a
fini par être un aspect vraiment important de la performance parce que nous encore voulons
utiliser C sharp et tous les bénéfices que nous avons, comme une langue de haut niveau, mais nous
pouvons identifier un peu de features de courant qui sont au point de l'hôte et nous l'éliminons
très agressif. Il y a des détails vraiment intéressants. On dirait que vous voulez
écrire un texte de Jason pour un network stream ou quelque chose comme ça. Qu'est-ce que vous
avez 100 MB de memoire que vous voulez écrire pour le network ?
Qu'est-ce que vous pensez que ce sera le plus expérience de la btm ?
Je ne sais pas. Vous avez vu le carton ? Oui, donc il y a vraiment, vraiment, vraiment
un truc très intéressant ici, ne pas essayer de l'écrire, pas de haut niveau. Félicifier
si l'evaluant, le point de vue que vous voulez écrire, a des caractères à l'esprit.
Donc, on dirait que vous avez... Je ne vous ai pas dit ça.
Oui, je n'ai pas dit ça. Il y a une raison, quand les gens parlent de performance, ils disent
profil. Je ne parle pas de profil sans aucun résultat car le nombre de fois que
je sais que c'est très lent et que je dois avoir une operation square en bas, que je
ne parle pas de profil, mais de profil.
Donc, on a réalisé que l'écrire, les barres sur le network, avant que vous puissiez écrire
ce truc, vous avez à vous donner des caractères à l'esprit,
ce qui signifie que vous avez à vous écrire sur le truc plusieurs fois et c'était
extrêmement expérience. On parle d'un plus grand de 15 % de la course de l'écrire
Jason, qui est le premier de l'écrire.
Donc, quand nous avons construit le format interne, on a un moyen de faire ça sans ça.
Et c'est un grand nombre de works autour de cette idée.
Quand on réalise que c'est un problème, on le solve.
En même temps, je fais ça dans C sharp, ce qui signifie que chaque fois que je ne
n'ai pas une issue de performance super critique, je n'ai pas de très haut niveau de features.
Et un autre aspect très important est le cycle de travail.
Si je parle d'une application C sharp et le B revendu est maintenant au point de
coulure, je le couvre et within 10 secondes, je débarque l'actualité.
Si je utilise C or C plus plus, c'est-à-dire C plus plus, je suis au 5 et je vais à l'étranger
parce que le cycle de travail, même en utilisant des pires incommunables et toutes
ces choses sont extrêmement expériences.
Je me souviens d'un moment, j'ai travaillé dans l'industrie des jeux, c'était C plus plus et
le code était massive. Et c'est un appel, je pense que c'est incroyable.
C'est un appel, c'est un appel, c'est un appel, c'est un appel, c'est un appel, c'est un appel, c'est un appel.
Je n'ai pas de problème avec le dataset de terabyte.
Après que vous indexez à peu près 650 millions de documents, il y a un access
de la base ou quelque chose comme ça.
Ok, je ne peux pas, je n'ai pas la machine pour en faire le local.
Mais je suis capable de sss de la machine, ouvrir le touch,
que l'on utilise via score ou Visual Studio.
Et je n'ai pas oublié d'accounter pour la méthode à l'overhead et il y a
quelque chose là-bas. Je peux fixer ça. Et je peux fixer ça et puis je le fais
encore un peu et je vérifie que ça marche dans des secondes.
C'est une machine de machines de plus en plus, sans vraiment
faire un tinge ou un autre. Et c'est un achievement incroyable.
Oui, ça s'est dit.
Donc, tu as regardé ces changements et les tweets que tu fais,
presumably, tu as des grandes décisions de tests, des tests uniques et des choses.
Je pense que la dernière fois que je regardais les unités, on avait quelque chose de 30 000.
Oui, et ils...
Donc, on a vraiment regardé un point où on a eu
tant de tests qu'il n'y avait pas de test sur
une machine de plus en plus, dans un temps plus réciproque.
Donc, on a vraiment eu quelque chose de 6 tests,
des tests, c'est le premier test, qui est de 3000 tests.
Et ils coudent plus de temps et ils ont fait plus de 5 minutes.
Et ensuite, tu as des tests de plus en plus, des tests de plus en plus,
des tests de plus en plus, que nous faisons.
Je n'ai pas fait 6 machines physiques et les mets dans les sèvres.
Et ils sont 100 % des temps, ils sont très busy les faire juste des bêtes.
Et on a un point où on a une queue,
que tu sais, ok, on peut voir les résultats pour ce petit round,
incluant tout le stuff de nuit,
seulement demain.
Et c'est drôle parce que nous avons aussi réalisé que, oh,
attends, on a eu un point de performance.
Donc, un jour, la performance de la siste est, on dirait, 1000.
Le prochain jour, c'est 200.
Et ça fait un sort de sort de salarié, donc ce qui se passe,
et on commence à analyser le code.
Et quelqu'un change quelque chose qui est lié à la priorité de la siste,
donc ça semble très suspicieux.
Mais tu sais, tu revends le changement et il se passe encore.
Et ce qui se passe, et ensuite on réalise que nous avons réalisé
les machines avec des disks en enceintes,
parce que c'est la façon de faire ça.
Et on basicement tourne dans le limiter des cycles de la siste.
Donc le drop de performance.
Et à ce point, maintenant, j'ai une discurse d'emergence
à la salle,
parce que ça dit que, à notre rate,
nous sommes en fait en train de les faire sur une base régulière.
Donc, ok, oui, on a un problème.
On va voir les détails de la siste,
et voir ce qu'il y a là-bas.
Mais il se dit que les machines physiques
étaient vraiment belles pour la décision financière,
parce que la course de la mobilisation de la siste
vers la siste,
c'est un grand favoris de détails en enceintes.
Et à la very start, quand tu as dit,
et tu as décrit ton background,
et tu as dit que tu es en train de utiliser les databases,
et que tu voulais juste quelque chose qui était simple et qui a travaillé,
tu ne regrettes pas maintenant que ça a été...
Ça a été compliqué.
Regarde, si je suis revenu et que je me suis parlé,
je serai en train de me faire rire.
Tu n'as pas d'idée de ce que tu es en train de faire.
Je me suis dit que tu es en train de me faire rire.
Je me suis dit que tu es en train de me faire rire.
Quand il faut calculer le temps de la décision financière,
je ne sais pas comment dire ça en anglais.
En anglais.
Oui, ceci.
Quand il faut que je compute ou quelque chose comme ça,
et puis tu réalises,
OK,
tout le curriculum de la sciences de computer
est absolument relevant pour les databases.
Une des choses que j'aime de nous demander,
les candidats, quand je vais les intervier,
c'est de construire un fonds de fonds.
Et je veux pouvoir chercher un usage parfait.
Je vais en faire un D.A. et j'ai le temps de me montrer,
etc.
On peut faire un search parfait pour les listeners?
Je vais en chercher un,
j'ai un fonds de fonds,
j'ai un fonds de fonds,
un fonds de fonds et le nom.
Je veux commencer à écrire le nom de la contact.
Je veux trouver ça.
En ce cas, je vais en faire un D.A.
et c'est pour me faire le D.A. et d'autres choses.
Et je veux faire ça
pour me faire en sorte que ce soit achievable
si on a des millions et des millions de records.
Le plus important pour moi, c'est que c'est
littéralement le CS101.
Vous parlez de OK,
vous avez besoin d'une structure sortie
et vous traversez le tric
jusqu'à trouver le premier record
qui a ces détails.
Et vous scannez.
Et si quelqu'un qui a pu impliquer un red-brick
ou une avialtrie
ou quelque chose d'autre,
est capable de faire ça
et de la manière dont beaucoup de gens ne peuvent pas faire ça.
Pour donner un autre exemple,
dans l'exemple de la file,
je me demande
comment vous assurez
qu'il y a un copier
d'un numéro 4.
Donc, un numéro 4 doit être unique.
Comment vous le faites?
Et
j'ai évidemment envie de faire ça
dans un moyen qui n'est pas un square.
Et l'answer pour ça
c'est OK, je suis expecté d'utiliser
un hash-set,
un dictionary, un map,
ou quelque chose de ce que vous voulez.
Et en tant que cas,
il ne peut pas
montrer à des gens.
J'ai des gens qui ne
qui ne sont pas, vous savez,
qui ont un couple de années d'expérience
dans l'industrie,
une habilité de s'améliorer la solution pour ça.
Je pense que dans la faim,
le travail de software d'avantage
s'appelle des formes de données,
des API, etc.
C'est une très délicieux chose
qu'on doit faire.
Vous me vous abattrez.
Dictionnaires et hash-tapers
ne sont pas des choses délicieux.
Peut-être pas ceux,
mais comme dans un bain,
des fruits et quelque chose.
Je ne m'en souviens pas de la dernière fois,
de faire quelque chose comme ça.
Oui, mais je ne me souviens pas
de vous rappeler comment ils sont faits.
Je ne me souviens pas de savoir
qu'ils existent, de pouvoir...
Oh, je dois avoir un problème.
Je vais utiliser ça
pour résoudre ce problème.
Et c'est vraiment intéressant
quand vous réalisez que,
ok, il y a un mystère
Oh, il y a cet API,
et comment il marche
est magique.
Je dois
un dataset terrible
et je veux pouvoir s'en parler.
Et
vous réalisez que, ok,
je vais faire ça,
il va être rapide.
Mais
comment va-t-il
être ?
Je n'ai pas d'idée,
sérieusement.
Et puis, si vous
pensez, ok, cet API, cet database,
la manière dont le poids est magique,
vous n'avez pas de manière
d'utiliser ça
d'une manière efficace.
Ce qui signifie que, oh,
c'était rapide, je ne sais pas pourquoi c'était rapide,
mais c'était rapide.
Je vais le faire de nouveau et de nouveau.
Ce qui signifie que
CargoCount et tout ce genre de choses.
Retournons au exemple de la fonte.
Un utilisateur qui a réussi
à faire un search parfait.
Et, d'accord,
AVL3, Scun Over the Cloud,
c'est très simple.
Ma prochaine question, c'est
que je peux faire un search,
et,
on va dire que
nous avons John Smith.
Et je veux
pouvoir
chercher J.O.
et trouver tous les John.
Et je veux chercher
SM et trouver tous les Smiths.
Et, basiquement,
faire un
non prefix de le whole name,
mais un prefix
de la partie du nom.
Ou je me souviens
que c'était
quelque chose qui a terminé
avec le CH, ou autre chose.
Et ça tend
à être, c'est un avion
et vous pensez, attends,
la fonte que j'ai faite
avant, la fonte était le full name.
Tout ce que je dois faire maintenant
est juste
couper
dans les mondes.
Et ça va être mon index.
Et vous pensez, hey,
c'est comme le search.
Et si vous voulez faire
plus de choses intéressantes, je peux utiliser
les gammes. Je ne vais pas
replier le database sur le monde,
mais tous les trois personnages
sont leurs propres
items que je peux chercher
pour regarder.
Et quand vous réalisez
que vous avez ces capacités
et les habilités, oh, maintenant je peux
faire des choses qui ressemblent
à la magie absolue.
Comme, il used to be the case
that you went to Google
and you searched for something
and it would find you what you meant.
Not what you search for.
Today you're
getting what someone paid for
which is a whole different topic.
But I remember being
absolutely amazed by
the accuracy
and oh, yes, I didn't know
how to say that, but this is what I was searching for.
And then
you realize that, ok, if I want to do the same thing on my end,
how complex
is this going to be?
I have a, let's say I have a CRM
system and I want to be able
to do a lookup of a particular
customer.
So I have the ability to give
you, you know, hear the ten fields
that you can search on.
Which may be no other ID,
customer ID, contact, whatever.
Or give you one field
which would search on your
behalf, all of them.
And the way it would search over all of them
is basically, ok, you're going
to aggregate all of the fields,
all of the interesting fields from the
document
and put them all into a tree
and then lookup based on that.
And this is
really, really simple.
We're talking about
if I'm writing that in pure C-sharp
doing that in memory,
we're talking about less than 50 lines of code.
But the results
of doing that is going
to blow people's head off.
And again, this is not magic.
And this is stuff that
we have been dealing with as
an interest for a very long time.
And then you get
to the realization that
amount, again, we're using the database field,
there has been tremendous amount
of research and publications
and information on that.
So
il y a un professeur
en cubanique,
il s'appelle Daniel Amir.
Et il parle
de performance.
Et il fait
des choses vraiment, vraiment, vraiment crailles
qui apparaissent
à l'extérieur, comme des questions
d'advers.
Il a écrit un lab
qui utilise
des intérêts compagnie,
des structures de synchronisation,
des données multipliées, la base de l'obligation
de procéder
d'un grand nombre d'informations
plus rapidement. Et le point
d'en faire ça, en utilisant
toutes les instructions spécifiques,
le point de faire ça est
de compresser les numéros.
Et pourquoi je ne m'en parle pas
de façon vraiment efficace
de compresser les numéros?
Mais hey, compresser les numéros
si les numéros sont
des lookups pour
des résultats particuliers,
ça veut dire
que j'ai un meilleur moyen
d'expliquer
les informations qu'ils doivent pouvoir faire
pour faire une query. Et la possibilité
de compresser et décompresser
sur le vol
veut dire que la performance
que vous pouvez donner à l'utilisateur est
plus significativement meilleure.
Et maintenant vous réalisez
que, oh, attends, c'est assez rapide?
que je ne peux pas
pas faire ça. Donc la cause de
la recueillie des données
et la cause de la décompressation
est la même.
Et c'est, ah, vous me demandez
qu'est-ce que je vais dire
à la personne de 50 ans, je dirais
que ce sera incroyablement
difficile, vraiment compliqué.
Et en même temps, c'est super
intéressant.
Parce que vous faites
quelque chose qui est
concret
et understandable.
C'est pas, oh, je dois être
capable d'impliquer le taxe
basé sur les stocks de
nouvelles sales qui se sont apportés
dans cette région de
l'école. Donc, dans cette
jurisdiction, vous avez ce type de stocks
ou quelque chose. Donc maintenant vous avez
à faire ça et ça se fait super complexe.
Mais c'est pas straightforward.
Dans le cas de database
la plupart des choses que je vais vous dire
c'est, ok, c'est straightforward.
Mais pour vous, c'est un
peu compliqué.
Pour vous donner un exemple,
nous avons imprimé le Chowdin.
Maintenant, c'est un
feature que nous avons
déjà fait en 2010. Et c'est certain
un feature pour
ce type de database.
Mais quand nous avons imprimé
ce que nous voulons faire, c'est
de prendre sur nous-mêmes
la complexité de la machine,
de expliquer le data entre les
plusieurs notes et comment vous
mérite cela. Donc, comme
un utiliseur, vous n'avez pas
à être exprès de cela.
Donc, le but est très simple.
Les toutes les simples choses sont
compliquées. Et vous avez
à s'assurer que dans un
environnement simple, vous faites
cela et que vous êtes consistant
de tout le monde de autres détails
comme cela. Mais
ça fait aussi sens.
C'est aussi quelque chose que vous
pouvez détenir. Ok, je suis en
un benchmark et je peux voir
que je suis 5%
mieux que ce que j'ai
fait. Et c'est un
très gratifiant
approach.
Je peux imaginer que je suis
en train de dire que beaucoup de
travail de développeurs se forment
sur le data et de faire un
CSS, tout ça. Et ça
ressemble à un
un de la même manière qu'une
nuit, donc tout les choses qu'on
doit penser. Mais ça ressemble
à un point de question.
On parle de la
traite et de la façon dont vous
pouvez les écouter.
J'ai l'impression que
sur le disque, vous avez un concept
d'encryption.
Comment est-il
que vous aviez une traite si le data est
encrypté ?
Ok, donc
il y a 3 types
d'adresse d'encryption
que vous soyez en train de
lire.
C'est pour qui vous pouvez lire
le data et qui vous pouvez l'opérer.
Donc, à la
plus haute
de la sécurité,
je vous donne un bloc.
C'est mon
numéro de sécurité sociale,
mon data crédible.
J'ai encrypté ça sur le client.
Vous ne vous avez juste pas dit pour moi. C'est ça.
Comme un database,
je n'ai pas de visibilité à ce qu'il y soit.
Pour le plus que je pouvais
peut-être être capable de
regarder l'existe valeur
parce que vous vous dites
ok, donnez-moi tous les usages qui ont
ce
numérique crédible.
Donc, c'est tout ce que je peux faire ici.
Et même ça est très
suspézié par le développement
de la cryptographie.
Donc, c'est tout de même
ce qu'il y a de la prochaine
c'est quelque chose de la encryption
de la cryptographie
qui
maintient
l'ordre d'une cryptographie
qui permet de faire
certains niveaux de queries
sur elles.
Pour mon perspective, c'est
à l'absence, parce
c'est très facile
de faire, oh, je dois
une cryptographie et je peux figure
qu'une des les plus
plus élevées que l'autre,
pour ressentir ce que est le valeur
de la cryptographie.
Parce que ce que je vais faire,
je vais dire, oh,
je vais dire que je
décrypte votre nom.
Donc, je vais chercher, ok,
je veux donner tout ce qui est plus grand
que M.
Ok, vous n'êtes pas là.
Donc, maintenant, donnez-moi tout ce qui est plus grand
que F. Vous n'êtes pas là.
Ok, donnez-moi tout ce qui est plus grand que C.
Vous êtes là. Ok, donc je sais que vous êtes entre
C et F.
Et puis je vais juste le faire,
Et puis vous emmener en
wollen, ou vous
jointz d'un coté.
Je doisㅯ
contre
F.
cube,
vous êtes fşf
et discarder des noirs, donc, pour exemple, je l'ai mentionné que nous avons les services de baleine et
les baleines se déroulent sur une base régulière.
Donc, nous les répliquons et nous le renouvelons.
Et si nous n'avons pas fait de la date correctement, vous pouvez presumir qu'on a un truc de la même.
En ce cas, ok, vous voulez voir des baleines de la main, ne vous inquiétez pas, ce n'est pas un secret.
Mais si c'est des données de transition, des données de santé de santé ou quelque chose comme ça,
c'est assez important.
Donc, c'est ce que l'adresse d'incruption est de la même manière.
Et le point que cela fonctionne, une base de database, quand il regarde un file,
il ne regarde pas le whole file comme un goût.
Il regarde sur les pages.
Et l'idée ici est que chaque page soit encryptée,
en utilisant ses quilles, en utilisant tout ce qu'il y a de détails.
Mais ça a été encrypté.
Maintenant, quand vous readz les données du disque,
vous readz les données encryptées,
les encryptées en mémoire,
et vous utilisez ça.
Et quand vous vous récoltez, vous le encryptez et vous le faites de cette façon.
Donc, c'est vraiment transparent pour la plupart des engines de database
que vous vous écrivez et que vous vous travaillez sur les données encryptées.
Nous ne sommes pas vraiment au courant de ça.
Et c'est un très beau truc de voir.
Donc, vous avez parlé de la base avant.
Vous avez mis le data avec la base, ou est-ce que c'est non cluster ?
OK, donc, quand nous parlons de databases,
nous avons le notion qu'il y a une mention de la force de Bitreys.
La industrie est de 1969.
Et le papier est appelé la « ubiquité de Bitreys ».
Donc, la partie de 16 heures a été utilisée.
Et si vous n'avez pas le temps de voir la force de Bitreys,
je vous recommande de lire comment ils marchent.
C'est un algorithme très simple.
Il y a beaucoup de variantes, mais c'est super utile.
Et la force de Bitreys n'est pas de la nourriture,
c'est de la balanche, non ?
Il y a la base, la base, la base, la base,
la base, la base, la base,
et il y a un whole bunch of variants.
Mais ce n'est pas de balanches.
Je ne sais pas si c'est balanche.
Il y a le binarit, c'est ce que vous avez promis,
qui est nécessaire pour faire la balanche.
A, B, ou B.
Bitreys est une base de bâtiments de faible,
typiquement de 4 kilobytes à 8 kilobytes.
C'est le nombre commun.
Vous essayez de repartir beaucoup de données
dans un petit espace possible.
Et nous parlons de...
Vous vous mentionnez de cluster et non cluster.
Vous venez de lire sur les données,
et vous dites que c'est où
quelles-ce que l'on soit,
la base de données,
dans l'ordre ou pas,
et ça ne fait pas vraiment sens
qu'il réalise ce qu'il y a.
La base de la bâtimentation est,
la question est,
qu'est-ce que vous vous mettez en bas,
ou que vous vous mettez en bas,
en itself,
ou en pointant à la date.
Et ça a des implications.
Pour exemple,
on peut prendre des postes,
des postes,
des exemples.
Les deux ne sont pas dans la date
dans la bâtimentation,
vous avez un pointant.
Mais il y a une question ici,
qu'est-ce que vous mettez en pointant.
Donc,
en postes, si vous avez un index
sur le fil de nom,
la valeur que vous avez
dans la bâtimentation
va être la première clé
pour ce nom.
Dans ma sequel,
vous avez
l'office sur le fil
pour ce nom.
Et ça lead
à un mécanisme très simple
dans lequel vous vous êtes en train.
Dans le poste,
si vous avez le fil
de nom,
pour chaque entrée que vous avez,
vous avez à faire un autre lookup
dans la première clé.
Dans ma sequel, vous n'avez pas à faire ça.
Dans la bâtimentation,
on utilise
les clés de la classe,
les clés de la classe,
et on a
l'office sur la valeur
dans le fil.
Et ça nous met beaucoup en train
parce que nous pouvons
trouver tous les marchés.
Et maintenant, nous avons un liste
de positions dans le fil
que je veux que vous soyez.
Et c'est quand vous commencez
à avoir beaucoup de fun
avec la bâtimentation,
parce que maintenant je peux dire
OK, je dois dire
200 items que j'ai les read
sur cette page.
Et ils sont allés sur le disque.
Je peux faire quelque chose qui s'appelle
Préfection et laisser les opérations
dire, hey, je vais avoir besoin
de tous ces items, ou vraiment
faire ce travail et amortir
la course de la course de cette phase.
Donc, quand vous regardez
les internes
d'un ancien urbain,
c'est très facile de l'au-delà
de considérer ça pour être magique.
Quand vous commencez à regarder
l'intérieur, il y a un huge
nombre de
des smarthes qui se passent, mais
la plupart des smarthes sont
juste, appelons-les
des diligence, ou juste le sort
de travail que vous avez besoin pour les choses.
La plupart des smarthes ne sont pas
compliquées.
Et la plupart des smarthes, vous pouvez commencer
à faire avec le CS101.
Ensuite, vous allez
au point où vous commencez à regarder
la course de Daniela Miran
et la sorte de choses que vous faites.
Et ceci est
super compliquant.
Mais, puis, vous réalisez
que je
ai cette super complication,
mais c'est tout de suite
de fonction, des numéros compresses
et des numéros décompressés. Et c'est ça.
Et ça se fait très bien
dans le reste de votre architecture.
Donc, vous trouvez,
comme vous avez dit, que
vous devez faire avec
si nous regardons un developer
en utilisant la Db.
Quand ils font des queries,
par exemple, quels sont les
des erreurs communes que vous voyez
qui peuvent avoir un effectif
de performance, etc.
Donc, c'est une question
intéressante, car la question
qui n'existe pas, est particulièrement
pour cette question, car je suis
désolé de
avoir de supporter
les mêmes erreurs
fois après fois après
fois. Et probablement
l'exemple classique de
une question comme ça, est que
quand vous vous rassurez une query, et qu'elle n'a pas créé
une propre indexation pour cela.
Un d'autres enjeux à ce point
ont deux options.
Il peut rééjecter la query, dire que je n'ai pas de
manière de le exécuter officiellement.
Ou il peut dire
OK, je vais commencer à
scanner tous les records dans le database.
Ce qui peut être
vraiment expensif.
Maintenant, la partie vraiment
vraiment sucky de cela, est que,
comme développeur, je suis en train de
travailler sur des petites données et des machines
de power, et un utilisateur.
C'est
totalement possible que mes queries soient
expensives, et je n'ai pas même vu ça.
Mais, pour mettre ça sur
les services de production, beaucoup de data,
beaucoup de queries, et puis, la performance
de trop, parce que vous êtes
en train de faire un grand nombre de
données. À quel point vous avez
besoin d'un expert, et que ce soit
que vous vous dites que vous avez mis
ce index, ou que ça c'est quelque chose.
Nous avons travaillé sur le point qu'on a fait,
c'est de dire, hey,
si je vais scanner tous les records de
toute façon, je vais
aller et créer un index pour cela.
Donc, la prochaine fois que vous venez
une query, il va
répondre à cela au index,
et, basiquement, un
feature justice, et je l'ai expliqué
dans quelques minutes, mais
ce feature justice signifie que,
si vous vous dites que vous avez des queries
sur le point de travailler sur le BNB, vous
vous avez donné une information
additionnelle sur votre environnement, et
vous avez pu créer un set de
indexes et des comportements appropriés
pour optimiser votre système.
Ce qui nous lead à un autre
problème très intéressant.
Vous ne pouvez pas faire ça sur plus de
création d'index, c'est
super expensif.
Il peut regarder la table, il peut
utiliser beaucoup de ressources.
Donc, c'est quelque chose
que la production, le création d'index,
la DBA fait ça
après qu'il s'est fastidérité et
médité pendant quelques semaines, etc.
Et même si vous vous démarrez
le temps de la dédaction, et tout ça,
tout ça, comme ça.
Avec Raylén, de la GEDCO,
on dit, hey, je dois être
officieux.
Et il faut être officieux, pas pour le point
de juste faire la fin de la fin de la
dédaction, mais
penser aux productifs de
les développeurs.
Donc, nous avons découvert, nous
avons découvert nos indexes de la GEDCO,
je suis capable de créer un système de production
et de créer un index, et
restons sûrs que ce ne sera pas
un système de lead.
Et cela signifie que je suis capable
de créer des indexes sur le flai, ce qui signifie
que nous devons assurer que les indexes
soient de la bonne qualité de production
et que le cycle continue.
Donc, nous avons un très fort
cycle de feedback pour
vous permettre de faire les
optimisations de la software,
sans faire l'assumement
que vous avez un développement de
non-motel, ou dBA, sur les cortes,
etc.
Je vous ai mentionné, Chardin,
comme le futur que nous avons maintenant,
qui est nouveau, même si nous avons le
dans 2010. Et la raison dont nous
avons ce sort de feature,
c'est que nous avons eu
beaucoup de temps et de efforts pour pouvoir
déterminer ce scénario,
sans
couper cette grosse partie de
complexité dans votre app.
Donc, maintenant vous pouvez aller au
RavenDB Studio et dire, ok, je veux que Chardin
soit sur ce database,
sur ce facteur de réplication,
et maintenant, je n'ai pas fait ça, c'est
marcher comme ça, et le reste de la
cour ne change. Et si je fais
quelque chose super bien,
le
progressisme de complexité dans
mon système
est
une progression
linéaire, et c'est relativement
plus smooth que ça.
Parce que, dans
d'autres cas, ok, un peu de mon système,
maintenant j'ai cette
grande complexité d'exponence,
ok, maintenant je dois comprendre
exactement ce qui se passe,
donc je vais pouvoir optimiser
ça efficacement.
Et
dans beaucoup de cas, c'est pas
quelque chose que vous pouvez faire.
Mais, je vais vous
parler de l'interaction
entre votre application et le database.
Donc,
on va dire que vous utilisez un
micro-service d'architecture,
et vous avez toutes les services
qui vous exposent, etc.
et vous vous consommez de
les clients.
Donc, pour les clients,
pour s'en prendre une page, vous
commencez à
dire, ok, donne-moi ici, donne-moi
et composez ça.
Et d'un perspective archéologique,
ça veut dire que la page
d'une seule page signifie
50 à 100 séparatifs
à chaque desquels vous faites
plusieurs requises pour le database.
Et vous regardez d'autres, ok,
il y a vraiment très peu
que je peux faire sur un
basis de preuves, optimisez ça,
parce que maintenant vous avez
à faire un grand
changement en l'architecture
de ce que vous faites.
Et ça est, à l'infant,
l'article de la réalité.
Donc, vous devez pouvoir
s'occuper
sans cette toute
CDBA qui optimise tout,
et vous devez
encore pouvoir
donner une bonne solution,
même sous l'architecture suboptimal.
Vous avez mentionné quelque chose
qui s'appelle RavenDB Studio,
et ça m'a
demandé, mais on va en faire indexer
si RavenDB est créant des indexes.
Est-ce que c'est un outil
ou un outil où vous pouvez visualiser
ce qui a été créé ?
Oui, donc la partie de la production
d'opération easy est de les faire visibles.
Donc, avec RavenDB,
RavenDB est opérée sur HGPS
ou HGP, et vous pouvez
pointer votre browser
à l'institut de RavenDB, et ça vous donnera
une grue, donc vous ne vous en avez pas
installé, et cette grue vous donne
des capacités de monitoring,
nous aussi, les choses comme, oh,
nous allons analyser les issues communs
et les résoudre
pour vous, pour exemple,
si vous vous regardez dans le cloud,
c'est très commun que vous vous rendez
sur une vraiment crie de hardware,
surtout des disques.
Donc, maintenant, vous vous rendez
sur un système est lent, pourquoi est-ce
ce système est lent ? Et c'est la
chose le plus faible que vous pouvez
essayer de faire pour le debug.
Donc, RavenDB, vous mesurez votre hiver, votre
rate, et si vous vous voyez que
hey, je vais essayer de l'utiliser
et il a pris
30 secondes pour mettre 1 MB
qui est
complètement possible dans le cloud, je ne vais pas
l'hiver dans un loge
que vous avez à savoir, on va
montrer que vous avez, ici, il est
alerté dans le studio, que hey,
cette fois, en ce moment,
ce n'est pas ce que nous avons, vous pouvez
coroller cela à votre métier de la store, et puis
aller à, hey, je dois avoir un meilleur disque
en fait, ok, nous supportons maintenant
un support, et on s'en va
tous les 3 semaines,
pour essayer de faire
plus de plus, pour essayer de
voir ce qui se passe.
C'est assez cool, et il y a
un containers de docker, donc vous pouvez
juste le mettre en place, et avoir un play.
Vous pouvez utiliser docker, Kubernetes,
Homecharts, ou quoi d'autre, Terraform,
vous pouvez
utiliser, nous avons
3 instances de cloud,
donc vous pouvez avoir votre propre
cloud instance, pour jouer avec Dread and Db.
Nous essayons de le faire
comme facile et approachable
possible.
L'idée est que vous ne vous
n'avez pas besoin de vraiment penser
comment vous faites cela, parmi
vous vous sentez, vous vous commencez, et
vous marchez.
C'est vraiment cool, et c'est aussi
dans Dotnet, donc, on va gagner, on va gagner.
Donc, il y a 10 minutes, vous avez
seulement 10 minutes, vous avez le temps
pour des dev pics, à la fin?
Donc,
en termes de dev pics, je serai
sur le commandant, aller lire
Daniel Lemir's blog.
Un topic fascinant, spécialement
en performance.
Nous avons porté son
SYNC Compression
à C-Sharp, et c'est
une performance incroyable.
De plus, il y a
5 pages de short
par James Meakin, qui s'appelle
Disward of Hours.
Il est une recherche
en Microsoft.
Et c'est
un papier
sur la sécurité.
Et son
thèse est
Mossad, ou pas de Mossad,
que vous devez faire avec le state de la nation,
ou, vous savez,
John, qui est un script guide,
et la différence
dans le système que vous avez à faire.
C'est très intéressant et très accurate,
mais tout de suite
que James Meakin, ou Daniel Lemir,
sont bien puissants.
Je vais définitivement
inclure ces notes dans le show.
Donc mon tip de dev tip est
un tweet, je suis sûr que tous les
listeners ont entendu de David Fowler, mais il
tue beaucoup de
très intéressants tweets
avec des codes snippets
sur les choses comme les allocations
et tout ça, qui a beaucoup
de réponses et beaucoup
d'autres gens en parlant.
Donc, un peu de ces tweets
ont beaucoup de conversations
sur la lave,
c-sharpon.net, et c'est
juste des threads fascinantes
là. En fait, non, je m'ai dit
Twitter, je dois l'envoi X maintenant.
Pourquoi n'est-il pas l'envoi X?
Oui, donc c'est juste...
Et je pense qu'il est en train de l'envoi, mais
oui, c'est très intéressant de vérifier.
Donc, avant de
faire la fin, où est le meilleur place
pour les listeners pour vous faire
des questions extraites?
Orin.
Et je vais
en Write in that here.
Bien sûr.
Et on va inclure les liens pour tout votre
chose dans les notes de la show.
Donc avec ça, juste un grand merci
pour les gens qui m'ont appris, c'était
assez divertant de faire des
dates base internals, je pense que je vais
avoir des nightmares pour les next few days,
juste de la picturer et de la faire avec tout ça, mais
ça me semble fascinant.
Merci, merci beaucoup.
Vous êtes bienvenus.
Et merci à tous d'avoir écouté.
Si vous avez aimé le podcast, s'il vous plait,
me l'a envoyé sur social media.
Je n'ai pas utilisé le hashtag
UnhandledException et je peux être
trouvé sur...
maintenant, sur Twitter, et
sur MyDM.
Et mon blog est
DanClock.com, qui a été lié
à tous mes trucs sociaux.
Et on va inclure les liens pour tout le
appui leAmerican Alek厲.
nous pour d sambar
nosait, j'en ai pas
oy.
Episode suivant:
Les infos glanées
TheUnhandledExceptionPodcast
Tags
NServiceBus - with Laïla Bougriâ