Systèmes client/ serveur – quelques liens pertinents
Quelques raccourcis :
Dans une optique connexe, certains concepts du monde client/
serveur sont maintenant plus associés au monde du développement
Web, ce qui a mené à une réorganisation de la présente
page. Ainsi, vous voudrez peut-être en savoir plus sur :
Vous trouverez ici quelques liens portant sur les systèmes client/ serveur
(SCS) et les technologies associées à
ce thème. Si vous découvrez d'autres
liens dignes d'intérêt, faites-m'en part!
Quelques organismes de standardisation importants :
Interopérabilité
L'interopérabilité entre diverses plateformes est un problème
à la fois complexe et de la plus haute importance. Si les cours offerts
dans les institutions d'enseignement supérieur couvrent les stratégies
et problématiques générales d'interopérabilité,
de même que certains cas particuliers, il est inévitable que des
problèmes pointus surviennent en cherchant à intégrer deux
technologies spécifiques entre elles.
Modalités générales
À propos des interactions synchrones (sens faible) et asynchrones pour
des rappels (Callbacks) : http://blog.ometer.com/2011/07/24/callbacks-synchronous-and-asynchronous/
Étude relativement détaillée des difficultés inhérentes à
l'interopérabilité entre les langages, par
David Chisnall en 2013 :
http://queue.acm.org/detail.cfm?id=2543971
Réaliser le réordonnancement des bytes dans un entier, selon
Rob Pike
en 2012 :
http://commandcenter.blogspot.it/2012/04/byte-order-fallacy.html?m=1
Intégrer
.NET avec
COM ou Win32
Même entre deux technologies provenant d'une même entreprise, les
problèmes d'interopérabilité potentiels sont nombreux et
sont susceptibles d'être épineux.
Articles du Code Project sur l'interopérabilité
entre .NET et
COM (comme
tout ce qui vient de ce site, la qualité varie beaucoup) :
Bien que CORBA ait développé une
mauvaise réputation dans certains cercles (plusieurs disent cette mécanique
lente et complexe, mais – comme c'est souvent le cas – une partie
de la critique tient du produit et une autre partie relève de l'usage
qui en est fait), cet intergiciel demeure très présent dans certains
cercles et savoir interfacer avec lui peut être précieux.
Pour un produit à code ouvert pour intégrer CORBA dans une relation de Remoting avec un homologue .NET, voir http://sourceforge.net/projects/remoting-corba/
ou encore http://www.dotnetguru.org/articles/articlets/iiopchannel/iiopremoting.htm
pour un article sur cette technologie.
Intégrer Java
avec du code natif
Parfois, il faut sortir du carré de sable défini par Java
et interagir avec le monde extérieur d'une manière que les conceptrices
et les concepteurs de cette plateforme n'ont pas prévu.
Pour un article du Code Project expliquant une manière pour un programme
Java d'exploiter
un composant C++
sous Win32, voir http://www.codeproject.com/KB/DLL/JNITest.aspx
À propos de JNI, le Java Native Interface :
Déboguer du code C++
à partir d'une application Java,
un texte du Code
Project par Gregory Shpitalnik en 2009 :
http://www.codeproject.com/KB/debug/java_cpp_debugging.aspx
- Deux moteurs de prise en charge du code ne sont pas nécessairement faciles
à intégrer dans un tout cohérent. Pour deux articles du
Code Project; donnant des indications susceptibles de vous rendre service, voir
http://www.codeproject.com/KB/dotnet/JavaDOTNETIntegrate.aspx
et http://www.codeproject.com/KB/dotnet/Espresso.aspx
- Un texte du Code
Project;, par Duc Huy Nguyen en 2012,
montrant comment enrober une bibliothèque
C#
de manière à faciliter son utilisation dans un code
Java :
http://www.codeproject.com/Articles/378826/How-to-wrap-a-Csharp-library-for-use-in-Java
- Pour passer de Java
à C#,
si c'est votre souhait, Microsoft offre un assistant à l'adresse
http://msdn2.microsoft.com/fr-fr/vstudio/aa718346(en-us).aspx
et, pour passer de JSP à
ASP.NET, un guide est disponible sur
http://msdn2.microsoft.com/en-us/asp.net/aa336627.aspx
(un article donnant les grandes lignes de ces stratégies se trouve sur
http://www.developer.com/java/other/article.php/2235411).
- Une autre option pour migrer de
Java
au monde .NET est offerte par l'article disponible
sur
http://www.javaworld.com/javaworld/jw-01-2003/jw-0103-migration.html
et qui offre plusieurs liens permettant d'en savoir plus.
- À l'inverse, l'article
http://www.infoworld.com/article/04/10/15/42TCinet_1.html
discute d'un produit facilitant la migration d'un programme .NET au monde J2EE.
- Autre stratégie : rédiger un programme de manière
à pouvoir le compiler à la fois pour
Java
et pour .NET. Voir
http://www.infoworld.com/article/04/06/11/24TCmainwin_1.html
- Encore une autre approche :
IKVM,
qui permet d'exécuter du code Java sur la plateforme .NET à code ouvert qu'est
Mono.
- Texte de Mike Grim en 2014 sur les avantages d'IKVM :
http://mikegrim.wordpress.com/2014/11/04/an-easy-way-to-combine-the-power-of-net-and-java/
- Un article décrivant l'interopérabilité
entre .NET et J2EE pour
des développeurs .NET.
- En 2003, Manish Verma explique comment réaliser
une communication asynchrone entre
Java
et .NET :
http://developers.sun.com/appserver/reference/techart/async_paper.html
Exemple pas à pas du Code Project, par Carlos Jiménez de Parga
en 2009 : http://www.codeproject.com/KB/IP/corba.aspx
Explication du RMI de CORBA
pour C++,
article du Code
Project par Jarl Lindrud en 2009 :
http://www.codeproject.com/KB/threads/RMI_For_Cpp.aspx
Intégrer C++
avec le monde pris en charge
Pour un lien montrant comment contrôler une feuille Excel à partir
d'un programme C++,
vous pouvez examiner http://www.codeproject.com/KB/wtl/WTLExcel.aspx
ou http://www.codeproject.com/KB/COM/VOLE_word.aspx
Deux liens pris chez Microsoft pour faciliter l'interaction entre
C++ et Excel
(pas du très beau code, cela dit, alors ne vous gênez pas pour
nettoyer le tout) : http://support.microsoft.com/kb/196776
et http://support.microsoft.com/kb/216686
Interopérabilité entre Office et
C# :
Dans ce texte de 2013, Ric da Paz suggère
d'utiliser Ruby plutôt que
Visual Basic .NET
pour réaliser ce type d'interopérabilité :
http://www.dapaz.net/blog/blog/2013/01/21/ms-office-and-ruby/
Automatiser Microsoft Office avec
Python, texte
de 2013 :
http://nbviewer.ipython.org/urls/raw.github.com/sanand0/ipython-notebooks/master/Office.ipynb
À propos des contrôles
OLE
et ActiveX
Si l'idée vous prend de développer des contrôles
OLE
ou ActiveX, je vous invite à prendre connaissance
des règles et recommandations à ce sujet : http://msdn.microsoft.com/en-us/library/ms974303.aspx
Autres
Comparatif des approches SOAP et
ICE, d'un point de vue favorable à ICE :
http://www.zeroc.com/iceVsSoap.html
Comment profiter au maximum de
SWIG, le Simple Wrapper and
Interface Generator, texte de 2015 :
https://www.softwariness.com/articles/api-design-for-swig/
Nommage
Dans le monde des services répartis, on trouve plusieurs approches au
nommage unique des ressources (des objets, des entités, des services,
etc.). Certaines sont universelles, d'autres sont associées
de plus près au monde
du Web, comme par exemples les URI
(URL, URN).
Texte de Zack Bloom en 2014 à propos de la
longueur minimale d'un identifiant se voulant unique au monde :
https://eager.io/blog/how-long-does-an-id-need-to-be/?r
Selon les contextes, on verra des synonymes pour UUID, comme IID (Interface Identifier),
RIID (Reference to IID),
REFIID (Constant RIID),
LIBID (Library Identifier), GUID (Globally
Unique Identifier), CLSID (Class Identifier),
APPID (Application Identifier), et j'en oublie peut-être.
On parle dans chaque cas d'entités ayant le même rôle –
identifier un objet de manière unique au monde – et ayant la même
structure interne
À propos des UUID, ou Universally Unique Identifier, aussi nommés GUID à l'occasion (pour Globally Unique Identifiers) :
Modèle RPC
Le modèle RPC préconise de représenter les
messages transitant entre deux homologues par des appels de fonctions.
Typiquement, l'appelant de la fonction sera le consommateur du service (le
client, dans la majorité des cas) et l'appelé sera le fournisseur du service
(le serveur, habituellement).
Pour isoler les deux homologues dans cette relation des détails du réseau
qui les lie, on appliquera souvent le
schéma de
conception Intermédiaire (Proxy) par lequel un objet côté client
exposera l'interface du serveur en se faisant passer pour ce dernier, et un
objet côté serveur se comporte comme le client. Ces deux entités tierces (les
intermédiaires) implémenteront le service par un échange de messages, à l'insu
des homologues « réels ».
Il existe plusieurs implémentations de ce modèle, mais il est tombé quelque
peu en défaveur dans les années 2000 avec
l'avènement du modèle
REST.
Protocoles
Quelques considérations générales :
Quelques protocoles RPC bien connus suivent.
DCE/RPC
Protocole sous-jacent entre autres au modèle DCOM.
Pour plus de détails, voir http://en.wikipedia.org/wiki/DCE/RPC
Pour quelques détails, voir http://en.wikipedia.org/wiki/Java_RMI
Un guide en ligne pour apprivoiser cette technologie : http://docs.oracle.com/javase/tutorial/rmi/
Site officiel de la technologie : http://www.oracle.com/technetwork/java/javase/tech/index-jsp-136424.html
Un exemple simple, par Takashi Yamanoue : http://yama-linux.cc.kagoshima-u.ac.jp/~yamanoue/researches/java/rmi-ex2/
Pour réaliser Java RMI à travers une couche de transport IIOP :
IIOP
Voir http://en.wikipedia.org/wiki/General_Inter-ORB_Protocol
pour débuter vos lectures. Aussi, voir :
NFS
Voir http://en.wikipedia.org/wiki/NFS_protocol
pour des détails.
RPC/XDR
Le format XDR est décrit sur http://en.wikipedia.org/wiki/External_Data_Representation
Architectures orientées services (AOS,
en anglais Service-Oriented Architectures, ou SOA)
Le Wiki sur les SOA est disponible sur http://en.wikipedia.org/wiki/Service-Oriented_Architecture
(pour une brève – et moins complète – définition,
voir http://www.service-architecture.com/web-services/articles/service-oriented_architecture_soa_definition.html).
Un petit article associant SOA et faible couplage
est disponible sur http://webservices.xml.com/pub/a/ws/2003/09/30/soa.html.
Vous trouverez aussi plusieurs liens sur la SOA à
travers http://wiki.java.net/bin/view/Javapedia/ServiceOrientedArchitecture
Le SOA Consortium, http://www.soa-consortium.org/,
vise entre autres à identifier ce qui fait que des projets SOA ont ou non du succès, de manière à faciliter
le succès de nouvelles entreprises en ce sens.
Articles divers sur le sujet :
Technologies dans le secteur intergiciel (Middleware)
Il existe plusieurs technologies dans le secteur intergiciel, en anglais Middleware.
Voici quelques-unes des principales dans le lot.
CORBA
Le Common Object Request Broker Architecture est une technologie
de composants répartis bien connue et multiplateforme. Elle a la
réputation d'être un peu inefficace, sans doute en partie
dû au fait qu'elle ratisse plus large que bien des concurrents.
Le nommage de CORBA se
fait à l'aide d'IOR, pour Interoperable
Object References. Là où un UUID
représente un gros entier, une IOR
est une longue chaîne de caractères. Des utilitaires
sont disponibles pour générer des IOR,
similaires à ceux qui permettent de générer des
UUID.
|
Caractéristiques |
- Gestion des erreurs : par levée d'exceptions
- Interfaces : CORBA IDL
- Langages : plusieurs,
surtout OO
- Médiation : objets servant de courtiers de requêtes
- Nommage : IOR
- Plateformes : plusieurs
- Protocole sous-jacent : IIOP
|
COM
Se décline en plusieurs standards, à partir de
DDE (Dynamic Data Exchange, si vieux que mes étudiant(e)s
n'en ont souvent jamais entendu parler!), puis d'OLE
(Object Linking and Embedding) à
COM (Component Object Model) à
DCOM (Distributed COM) à
COM+.
|
Caractéristiques |
- Gestion des erreurs : par retour de codes d'erreurs
- Interfaces : MIDL
- Langages : plusieurs,
de langages OO
au langage C
- Médiation : base de registre, fabriques
- Nommage : UUID
- Plateformes : surtout Microsoft
Windows, avec quelques implémentations Linux
et une version par Mozilla
- Protocole sous-jacent : DCE/RPC
|
Pédagogie :
Technique :
- Isoler une DLL dans un exécutable substitut
(en anglais : Surrogate), autre que celui du client : http://msdn.microsoft.com/en-us/library/ms695225
- Comment utiliser COM avec du C
« vanille », une série d'articles du Code Project
par Jeff Glatt :
- Interopérabilité avec COM, de
la manière difficile, un article du Code Project par Kees Pieters en
2007 : http://www.codeproject.com/KB/COM/ComHard.aspx
- Émuler CoCreateInstance(), article du
Code Project par Elias Bachaalany en 2007 :
http://www.codeproject.com/KB/COM/Emul_CoCreateInstance.aspx
- Interopérer avec Microsoft Word, article du Code Project par Dmitry
Khudorozhkov en 2007 : http://www.codeproject.com/KB/COM/twowords.aspx
- Interopérer avec Microsoft Excel à partir de Python,
texte de 2009 : http://www.dev-explorer.com/articles/excel-spreadsheets-and-python
- Un COM-Callable Wrapper qui
peut être appelié par JavaScript,
article du Code
Project en 2010 : http://www.codeproject.com/KB/COM/Universal_CCW.aspx
- Communiquer avec DCOM autrement que par le port
traditionnel, article du Code Project un texte de 2009 :
http://www.codeproject.com/KB/COM/ComBridge.aspx
- En lien avec XPCOM, la variante de COM pour Mozilla :
- Les clés de registre pertinentes pour COM :
http://msdn.microsoft.com/en-us/library/ms680055
- Considérations de sécurité :
- Considérations d'inscription à la base de registres, textes
de Larry Osterman en 2006 :
- En 2014,
Raymond
Chen rappelle que COM ne peut régler vos
problèmes pour vous s'il n'intervient pas :
http://blogs.msdn.com/b/oldnewthing/archive/2014/09/26/10560553.aspx
- Dans quelles circonstances AddRef() est-elle
susceptible de retourner zéro? Explication de
Raymond
Chen en 2015 :
http://blogs.msdn.com/b/oldnewthing/archive/2015/03/12/10599631.aspx
- Une méthode COM peut-elle être variadique? La
réponse courte est « non », et
Raymond
Chen explique pourquoi dans ce texte de 2015 :
http://blogs.msdn.com/b/oldnewthing/archive/2015/04/24/10609576.aspx
Résurgence :
EJB
Les Beans de Java
sont des composants côté serveur implémentant typiquement
des éléments de logique métier, de persistance, d'intégrité
transactionnelle, de sécurité, etc.
|
Caractéristiques |
- Gestion des erreurs : par levée d'exceptions
- Interfaces : Java, CORBA IDL, WSDL
- Langages : Java
et d'autres langages prévus pour la JVM
- Médiation : base de registre, fabriques
- Nommage :
JNDI
- Plateformes : plusieurs, selon la disponibilité d'une
JVM
- Protocole sous-jacent : Java RMI
|
ICE
OSGi
Infos à venir.
.NET
Théorème CAP
En 2000,
Eric Allen Brewer, dans une
présentation nommée Towards Robust Distributed Systems, a mis de l'avant que, pour un
système réparti où des données sont partagées, on ne peut avoir que deux des
trois propriétés suivantes :
- Cohérence (Consistency), au sens où les écritures et les
changements aux états partagés sont atomiques pour le système entier
- Disponibilité (Availability), au sens où le système demeure
disponible et opérationnel en tout temps
- Tolérance aux partitions (Partition Tolerance), au sens où rien
d'autre qu'une panne du système entier ne peut empêcher ce système de
répondre correctement aux requêtes
Cette conjecture, que l'on nomme maintenant théorème CAP
dû aux lettres qui débutent chacun des mots clés qu'il met de l'avant,
semble tenir la route en pratique. Il a été prouvé par Seth Gilbert et Nancy
Lynch (voir ci-dessous) et a entre autres
influencé le développement d'approches telles que la mouvance
NoSQL, qui tendent vers ce qu'elles qualifient de « cohérence éventuelle »
sans exiger que le système soit en tout temps cohérent.
Quelques pistes pour apprivoiser le théorème CAP :
Cohérence répartie :
Approche NoSQL
Quelques pistes pour apprivoiser l'approche
NoSQL, plusieurs ayant un lien avec le théorème CAP :
- Définir le terme NoSQL, un texte de
Martin
Fowler en 2012 :
http://martinfowler.com/bliki/NosqlDefinition.html
- Description de la mouvance NoSQL, en 2010 : http://blogs.computerworlduk.com/app-dev-and-programme-management/2010/02/the-nosql-movement-is-growing-but-what-is-it/index.htm
- Un lien général vers diverses technologies dans ce créneau, lien qui m'a
été proposé par Mounir Boussafsaf en 2012 :
http://nosql-database.org/
- Selon Robert Treat, en 2012, il ne faut pas
confondre NoSQL avec NoDBA :
http://omniti.com/seeds/why-nosql-does-not-mean-nodba
- Les textes qu'il faut lire pour comprendre NoSQL, du moins selon Kas Thomas en 2009 : http://asserttrue.blogspot.com/2009/12/nosql-required-reading.html
- Quitter MySQL pour prendre un virage NoSQL, un cas d'espèce relaté en 2010 : http://www.unixmen.com/news-today/875-digg-says-yes-to-nosql-and-bye-to-mysql
- En 2009, un texte de Dare Obasanjo qui discute
de NoSQL, de dénormalisation des données :
http://www.25hoursaday.com/weblog/2009/09/10/BuildingScalableDatabasesDenormalizationTheNoSQLMovementAndDigg.aspx
- Selon Stephan Schmidt en 2010, NoSQL ne mourra pas de sitôt :
http://codemonkeyism.com/nosql-die/
- Visualiser la mouvance NoSQL et le
théorème CAP, par Nathan Hurst en 2010 : http://blog.nahurst.com/visual-guide-to-nosql-systems
- Texte de Jonathan Ellis en 2009 décrivant l'écosysème NoSQL à l'époque : http://www.rackspacecloud.com/blog/2009/11/09/nosql-ecosystem/
- Texte expliquant comment Aleksander Kmetec voyait le futur de la mouvance NoSQL en 2009 : http://lexandera.com/2009/11/predictions-on-the-future-of-nosql/
- Entrevue avec un penseur du domaine, par Gavin Clarke en 2010 : http://www.theregister.co.uk/2010/09/13/mic hael_stonebraker_interview/
- Utiliser MySQL avec une approche NoSQL, par Yoshinori Matsunobu en 2010 : http://yoshinorimatsunobu.blogspot.com/2010/10/using-mysql-as-nosql-story-for.html
- L'approche NoSQL serait l'enfant conceptuel de Google, Amazon et...
Lotus Notes, selon cet article de Klint Finley en 2012 :
http://www.wired.com/wiredenterprise/2012/12/couchdb/
- En 2010, Daniel Lemire se questionne à savoir
si NoSQL ne devrait pas plutôt se nommer NoJoin :
http://lemire.me/blog/archives/2010/06/28/nosql-or-nojoin/
- Texte de 2012 par Ilya Katsov sur des
techniques de modélisation de données appropriées pour NoSQL :
http://highlyscalable.wordpress.com/2012/03/01/nosql-data-modeling-techniques/
- Approche pragmatique à la mouvance NoSQL, par Benjamin Black en
2010 :
http://gigaom.com/cloud/nosql-is-for-the-birds/
- Comment l'approche NoSQL est appliquée chez Netflix, texte de 2011 :
http://techblog.netflix.com/2011/01/nosql-at-netflix.html
- En 2011,
Erik Meijer et Gavin Bierman dissertent sur le fait
que
SQL et NoSQL sont en faits deux facettes d'une même entité :
http://queue.acm.org/detail.cfm?id=1961297
- Choisir NoSQL pour les bonnes raisons, un texte de Markus Winand en
2011 :
http://blog.fatalmind.com/2011/05/13/choosing-nosql-for-the-right-reason/
- Les quatre catégories de bases de données NoSQL, décrites par Timan Rebel
en 2012 :
http://rebelic.nl/engineering/the-four-categories-of-nosql-databases/
- Utiliser NoSQL? Mieux vaut se demander tout d'abord si on a besoin d'une
base de données, de l'avis de
Martin
Fowler en 2011 :
http://martinfowler.com/bliki/MemoryImage.html
- Apprendre NoSQL, un texte de Karl Seguin en 2011 :
http://openmymind.net/2011/8/15/How-You-Should-Go-About-Learning-NoSQL/
- Utiliser une
Cache répartie comme s'il s'agissait d'une base de données
NoSQL, texte de 2011 par Srini Penchikala :
http://www.infoq.com/news/2011/11/distributed-cache-nosql-data-sto
- À propos de l'impact de Google sur le mouvement NoSQL, texte de William
Edwards en 2012 :
http://williamedwardscoder.tumblr.com/post/16399069781/google-moresql-is-real
- Des algorithmes répartis appropriés pour des technologies NoSQL, par Ilya
Katsov en 2012 :
http://highlyscalable.wordpress.com/2012/09/18/distributed-algorithms-in-nosql-databases/
- En 2012, John D. Cook parle de la chute de
popularité de la troisième forme normale :
http://www.johndcook.com/blog/2012/11/21/rise-and-fall-of-the-third-normal-form/
- Comprendre NoSQL en trois étapes, par Maun PK en
2014 :
http://www.javacodegeeks.com/2013/03/a-3-step-guide-to-getting-started-with-nosql.html
- Entrevue avec Michael Franklin sur l'importance à la fois de NoSQL et de
SQL,
relatée par Derrick Harris en 2015 :
https://medium.com/s-c-a-l-e/database-guru-on-why-nosql-matters-and-sql-still-matters-c64239fe84fd
Une particularité de plusieurs types de bases de données NoSQL est de ne pas
garantir une cohérence (le « C » du théorème CAP)
des données en tout temps – dans le monde NoSQL, on parle plutôt de cohérence
éventuelle, au sens où même s'il y a réplication des données, il est
possible que certains noeuds d'une telle base de données aient une version d'une donnée pendant que d'autres
noeuds ont une autre version de la même donnée. Accepter cette réalité est un
a priori du choix d'une approche NoSQL. À ce sujet :
Plus près des produits eux-mêmes (liste non-exhaustive) :
- D'intérêt historique, le produit BerkeleyDB :
http://highscalability.com/blog/2012/2/20/berkeley-db-architecture-nosql-before-nosql-was-cool.html
- Le produit Apache Cassandra : http://cassandra.apache.org/
- Le produit Couchbase (autrefois Membase) :
http://www.couchbase.com/wiki/display/couchbase/Home
- Le produit Hadoop, d'Apache :
http://readwrite.com/2013/05/23/hadoop-what-it-is-and-how-it-works
- Le produit Moneta, pour interfacer avec les entrepôts de type clé/ valeur : https://github.com/wycats/moneta#readme
- Le projet Voldemort, un entrepôt de type clé/ valeur :
http://www.project-voldemort.com/voldemort/
- Le produit CouchDB : http://couchdb.apache.org/
- Le produit MongoDB : http://www.mongodb.org/display/DOCS/Home
- Le produit Neo4j : http://neo4j.org/
- Un produit NoSQL par Oracle, texte de 2011 par
Peter Wayner :
http://www.infoworld.com/d/data-explosion/first-look-oracle-nosql-database-179107
- Une base de données clé/ valeur méconnue, Postgresql :
http://blog.creapptives.com/post/14062057061/the-key-value-store-everyone-ignored-postgresql
- Le produit Hyperdex : http://hyperdex.org/
- Bien utiliser un outil NoSQL, par Jim Webber en 2011 :
http://jim.webber.name/2011/04/square-pegs-and-round-holes-in-the-nosql-world/
- http://code.google.com/p/redis/
- http://1978th.net/tokyocabinet/
- Appliquer l'approche NoSQL en
Ruby, par James Golick en 2009 : http://jamesgolick.com/2009/12/16/introducing-friendly-nosql-with-mysql-in-ruby.html
- Je ne sais pas où classer ceci, mais
Zed A. Shaw a construit sa propre
base de données NoSQL dans laquelle
JSON est le format dominant :
http://sheddingbikes.com/posts/1273859940.html
- Le langage UnQL, qui se veut un « sur-ensemble » de
SQL, décrit par Joab
Jackson en 2011 :
http://www.arnnet.com.au/article/395469/couchbase_sqlite_launch_unified_nosql_query_language/
Évidemment, c'est un mouvement contesté :
Un livre pas mal sur
le sujet.