Bases de Datos Orientadas a Objetos - PowerPoint PPT Presentation

About This Presentation
Title:

Bases de Datos Orientadas a Objetos

Description:

Title: GemStone vs. Otras BDOOO Author: daniel Last modified by: lab04 Created Date: 4/20/2005 9:50:29 AM Document presentation format: Presentaci n en pantalla – PowerPoint PPT presentation

Number of Views:438
Avg rating:3.0/5.0
Slides: 65
Provided by: Dan5389
Category:

less

Transcript and Presenter's Notes

Title: Bases de Datos Orientadas a Objetos


1
Bases de Datos Orientadas a Objetos
  • Daniel Artázcoz
  • Ekaitz Balda

2
Índice
  • Introducción
  • Historia de las BDOO
  • Características de BDOO
  • Obligatorias
  • Opcionales y Abiertas
  • Seguridad y otras funcionalidades
  • Ventajas y posibles desventajas
  • SGBDOO vs. SGBDR
  • SGBDOO mas conocidos
  • O2
  • GemStone
  • Conclusiones

3
Índice
  • Introducción
  • Historia de las BDOO
  • Características de BDOO
  • Obligatorias
  • Opcionales y Abiertas
  • Seguridad y otras funcionalidades
  • Ventajas y posibles desventajas
  • SGBDOO vs. SGBDR
  • SGBDOO mas conocidos
  • O2
  • GemStone
  • Conclusiones

4
IntroducciónQué es O.O.?
  • "La orientación a objetos proporciona una
    solución que conduce a un Universo de Objetos
    'bien educados' que se piden de manera cortés,
    concederse mutuamente sus deseos".
    (Dan Ingalls de Smalltalk)
  • Por qué O.O.? Porque tienen gran capacidad de
    reutilización de código y con metodología
    eficientes y efectivas que se aplican al proceso
    de producción de software.

5
IntroducciónPor qué se crean las bases de
datos?
  • Los SGBD tradicionales tienen deficiencias con
    aplicaciones complejas (diseño y fabricación en
    ingeniería, GIS, multimedia, etc.)
  • Aumento del uso de los lenguajes de programación
    orientada a objetos
  • Un objetivo mantener una correspondencia directa
    entre los objetos del mundo real y de la base de
    datos

6
Índice
  • Introducción
  • Historia de las BDOO
  • Características de BDOO
  • Obligatorias
  • Opcionales y Abiertas
  • Seguridad y otras funcionalidades
  • Ventajas y posibles desventajas
  • SGBDOO vs. SGBDR
  • SGBDOO mas conocidos
  • O2
  • GemStone
  • Conclusiones

7
Evolución de SGBD
8
Historia de Base datos OO
  • 1967
  • - Simula67 - primer lenguaje con conceptos O-O
  • Introduce el concepto de clase
  • 1980s
  • Comienza el auge de los lenguajes O-O
  • SmallTalk-(Goldberg)-Xerox Palo Alto Research
    Ctr.
  • C (Stroustrup) - Bell Labs. (1983)

9
Historia de Base datos OO
  • 1980s
  • Prototipos de investigación sistemas SGBDOO
  • GemStone (Copeland Maier _at_ Servio Logic Corp.)
    (1984)
  • Introducen el concepto de persistencia en
    lenguajes O-O SmallTalk
  • Objetos existen después de que la aplicación
    termina su ejecución

10
Historia de Base datos OO
  • 1980s (cont.)
  • Prototipos de investigación sistemas SGBDOO
    (cont.)
  • Sistemas objeto-relacionales
  • POSTGRES (Stonebraker, UCB) (1986)
  • Startbusrt (IBM, 1985)
  • 1990s-2000s - Explosión SGBDOO
  • Sistemas comerciales
  • ObjectStore
  • Versant
  • Ontos
  • Gemstone
  • PUF !
  • Abarcan solamente un 1 del mercado

11
Índice
  • Introducción
  • Historia de las BDOO
  • Características de BDOO
  • Obligatorias
  • Opcionales y Abiertas
  • Seguridad y otras funcionalidades
  • Ventajas y posibles desventajas
  • SGBDOO vs. SGBDR
  • SGBDOO mas conocidos
  • O2
  • GemStone
  • Conclusiones

12
Características de BDOO
  • Se pueden dividir en tres grupos
  • Obligatorias Son las que el Sistema debe
    satisfacer a orden de tener un sistema de BDOO
  • Opcionales Son las que pueden ser añadidas para
    hacer el sistema mejor
  • Abiertas Son las que pueden ser añadidas por el
    diseñador

13
Características Obligatorias
  • Por ser OO
  • Identificador de objeto (OID)
  • Objetos complejos
  • Encapsulamiento
  • Tipos o clases
  • Herencia y jerarquía tipos
  • Polimorfismo y sobrecarga
  • Por ser SGBD
  • Persistencia
  • Concurrencia
  • Recuperación ante fallos
  • Lenguaje de definición de objetos (ODL)
  • Lenguaje de manipulación (OQL)

14
Características Obligatorias
  • Por ser OO
  • Identificador de objeto (OID)
  • Objetos complejos
  • Encapsulamiento
  • Tipos o clases
  • Herencia y jerarquía tipos
  • Polimorfismo y sobrecarga
  • Por ser SGBD
  • Persistencia
  • Concurrencia
  • Recuperación ante fallos
  • Lenguaje de definición de objetos (ODL)
  • Lenguaje de manipulación (OQL)

15
Características Obligatorias (I)
  • Identificador de objeto (OID)
  • Es único, generado por el sistema y no es
    visible para el usuario externo
  • La principal propiedad de un OID es la de ser
    inmutable
  • Lo mas usual es usar un entero largo como OID y
    luego usar alguna tabla de dispersión (hash) para
    hacer corresponder el valor OID con la dirección
    física del objeto
  • La mayor parte de los SBDOO permiten representar
    tanto objetos como valores

16
Características Obligatorias (II)
  • Objetos complejos
  • Los objetos pueden tener una estructura de
    objeto de complejidad arbitraria con el fin de
    contener toda la información significativa que
    describe al objeto
  • En las bases de datos relacionales la
    información sobre un objeto complejo suele estar
    dispersa entre muchas relaciones, haciendo que se
    pierda la correspondencia directa entre un objeto
    del mundo real y su representación en la base de
    datos

17
Características Obligatorias (III)
  • Encapsulación
  • Un objeto tiene normalmente dos componentes
    estado (valor) y comportamiento (operaciones)
  • La estructura interna de un objeto contiene
    variables de instancia, similares a los atributos
    en SGBDR, pero pueden ser visibles o no
  • Si no son visibles, solo se puede acceder a
    través de las operaciones
  • Permite modificar la estructura interna sin
    modificar los programas externos

18
Características Obligatorias (IV)
  • Tipos o clases
  • Tipo de Objeto es una categoría de objeto
    (EMPLEADO). Un objeto es una Instancia de un tipo
    de objeto. PERSONA (Juan Pérez)
  • Clase especifica una estructura de datos y los
    métodos operativos permisibles que se aplican a
    cada uno de sus objetos. Las operaciones más
    usuales constructora, destructora, modificadoras
    y recuperadoras

19
Características Obligatorias (V)
  • Herencia y jerarquías de tipo
  • Permite especificar nuevos tipos o clases que
    heredan gran parte de su estructura y operaciones
    previamente definidas. Esto facilita la
    reutilización de las definiciones de tipos
    existentes cuando se crean nuevos tipos de
    objetos
  • El subtipo hereda toda las funciones del tipo
    predefinido (supertipo), dando lugar a una
    jerarquía de tipos o de clases

20
Características Obligatorias (VI)
  • Polimorfismo o sobrecarga de operadores
  • Un nombre de operación se puede referir a varias
    implementaciones distintas, dependiendo del tipo
    de objetos al que se aplique

21
Características Obligatorias
  • Por ser OO
  • Identificador de objeto (OID)
  • Objetos complejos
  • Encapsulamiento
  • Tipos o clases
  • Herencia y jerarquía tipos
  • Polimorfismo y sobrecarga
  • Por ser SGBD
  • Persistencia
  • Concurrencia
  • Recuperación ante fallos
  • Lenguaje de definición de objetos (ODL)
  • Lenguaje de manipulación (OQL)

22
Características Obligatorias (VII)
  • Persistencia
  • No todos los objetos se almacenan
    permanentemente en la base de datos
  • Objetos transitorios existen durante la
    ejecución de un programa
  • Objetos persistentes se almacenan en la base de
    datos y persisten después de la terminación del
    programa

23
Características Obligatorias (VIII)
  • Concurrencia
  • Permite que varios usuarios o aplicaciones
    tengan acceso a una BD al mismo tiempo y
    compartan objetos de forma segura
  • Los primeros SGBDOO no soportaban el control de
    concurrencia (eran sistemas de ficheros)

24
Características Obligatorias (IX)
  • Recuperación ante fallos
  • Gestión de transacciones incluye capacidades de
    recuperación ante fallos
  • Cuando se intenta una transacción pero no se
    puede realizar y es necesario regresar al mismo
    estado en el que se encontraba la base de datos

25
Características Obligatorias (X)
  • Lenguaje de definición de objetos (ODL)
  • Similar al DDL de los sistemas relacionales, que
    incorpore los constructores de tipos anteriores
    para definir tipos de objetos para una aplicación
    de base de datos específica. Usaremos las
    palabras clave tupla, conjunto y lista para los
    constructores de tipos, y usaremos los tipos de
    datos estándar disponibles (integer, string,
    flota, etc.) para los tipos atómicos

26
Características Obligatorias (XI)
  • Lenguaje de manipulación (OQL)
  • La sintaxis similar a la de SQL, con
    características adicionales como identidad de
    objetos, objetos complejos, operaciones,
    herencia, polimorfismo y relaciones

27
Características de BDOO
  • Se pueden dividir en tres grupos
  • Obligatorias Son las que el Sistema debe
    satisfacer a orden de tener un sistema de BDOO
  • Opcionales Son las que pueden ser añadidas para
    hacer el sistema mejor
  • Abiertas Son las que pueden ser añadidas por el
    diseñador

28
Características Opcionales y Abiertas
  • Características Abiertas Son como una
    especialización, que queda en manos del diseñador
  • Características Opcionales
  • Herencia múltiple y herencia selectiva
  • Versiones
  • Verificación e inferencia del tipo

29
Características Opcionales (I)
  • Herencia múltiple y herencia selectiva
  • Herencia múltiple un subtipo es subtipo de dos
    supertipos y por tanto hereda las funciones de
    ambos.
  • Herencia selectiva cuando un subtipo hereda
    sólo algunas de las funciones del supertipo

30
Características Opcionales (II)
  • Versiones
  • Algunos sistemas OO cuentan con capacidades para
    manejar múltiples versiones del mismo objeto
  • Útil para conservar una versión anterior hasta
    que la nueva versión se haya probado y
    verificado, por ejemplo

31
Características Opcionales (III)
  • Verificación e inferencia del tipo
  • Distribución Que se puede tener parte de una BD
    en un servidor y otra parte en otro
  • Sistema de Representación Como se presentan los
    esquemas
  • Uniformidad Todo debe ser igual
  • Asociaciones y Cardinalidad de Asociaciones
  • 11,1M, M1, MM

32
Índice
  • Introducción
  • Historia de las BDOO
  • Características de BDOO
  • Obligatorias
  • Opcionales y Abiertas
  • Seguridad y otras funcionalidades
  • Ventajas y posibles desventajas
  • SGBDOO vs. SGBDR
  • SGBDOO mas conocidos
  • O2
  • GemStone
  • Conclusiones

33
Seguridad
  • Muchos SGBDOO utilizan los recursos de seguridad
    que les proporciona el S.O. subyacente (Unix,
    Windows)
  • Otros sistemas utilizan mecanismos de protección
    de esquemas mediante password
  • Los SGBDR son más potentes en este sentido

34
Otras funcionalidades
  • Restricciones los SGBDOO no las soportan, se
    usan las operaciones predefinidas
  • Vistas los SGBDOO no soportan las vistas,
    también se utilizan las operaciones propias del
    objeto

35
Índice
  • Introducción
  • Historia de las BDOO
  • Características de BDOO
  • Obligatorias
  • Opcionales y Abiertas
  • Seguridad y otras funcionalidades
  • Ventajas y posibles desventajas
  • SGBDOO vs. SGBDR
  • SGBDOO mas conocidos
  • O2
  • GemStone
  • Conclusiones

36
Ventajas en BDOOs
  • Está su flexibilidad, y soporte para el manejo de
    tipos de datos complejos (modificaciones con
    herencia)
  • La segunda ventaja de una BDOO, es que manipula
    datos complejos en forma rápida y ágilmente,
    debido a las referencias o apuntadores lógicos
    entre objetos

37
Posibles Desventajas
  • La inmadurez del mercado de BDOO constituye una
    posible fuente de problemas
  • El segundo problema es la falta de estándares en
    la industria orientada a objetos, aunque cada vez
    tiene más fuerza el estándar ODMG

38
Índice
  • Introducción
  • Historia de las BDOO
  • Características de BDOO
  • Obligatorias
  • Opcionales y Abiertas
  • Seguridad y otras funcionalidades
  • Ventajas y posibles desventajas
  • SGBDOO vs. SGBDR
  • SGBDOO mas conocidos
  • O2
  • GemStone
  • Conclusiones

39
SGBDOO vs. SGBDR
  • Diferencias en el diseño
  • Las relaciones en BDOO incluir los OIDs en los
    dos objetos, referencias inversas, mientras en
    BDR es mediante atributos coincidentes
  • La herencia en las BDR no existe el concepto de
    herencia
  • Operaciones es necesario especificar las
    operaciones en las BDO al comienzo del diseño,
    mientras en las BDR no es necesario hasta la fase
    de implementación

40
SGBDOO vs. SGBDR
  • Tienen un OID único, para saber si es el mismo
    objeto o no, en las BDR es difícil saberlo
  • Permiten objetos complejos, mientras en las BDR
    están en múltiples tablas perdiendo la
    correspondencia con el mundo real
  • Reutilización y encapsulación son diferencias
    principales y muy importantes

41
Índice
  • Introducción
  • Historia de las BDOO
  • Características de BDOO
  • Obligatorias
  • Opcionales y Abiertas
  • Seguridad y otras funcionalidades
  • Ventajas y posibles desventajas
  • SGBDOO vs. SGBDR
  • SGBDOO mas conocidos
  • O2
  • GemStone
  • Conclusiones

42
SGBDOO mas conocidos
  • GEMSTONE (Meier y Stone)
  • Basado lenguaje OOP Smalltalk
  • Producto comercial que suministra
  • Integridad de un objeto
  • Encapsulación de un objeto
  • Herencia simple
  • Interfaz externa
  • Control de concurrencia
  • Recuperación
  • Gestión almacenamiento secundario y autorización
  • Soporta acceso concurrente y métodos para
    mantener seguridad e integridad en la BD.

43
SGBDOO mas conocidos
  • VBASE (Andrews y Harris 1987)
  • SGBDOO comercial
  • Estructura fuerte de tipos de datos
  • Utiliza tipos datos abstractos
  • Lenguaje TDL para definición de objetos
  • Lenguaje implementación COP
  • Permite creación objetos de un tipo (clase)
  • Permite creación objetos agregados
  • Soporta interrelaciones entre objetos 11,1N,
    NN
  • Los objetos pueden compartirse en múltiples
    procesos concurrentemente
  • Proporciona facilidades de seguridad y
    recuperación
  • Control de acceso es simple

44
SGBDOO mas conocidos
  • ORION (Banerjee y otros 1987)
  • Prototipo BDOO, igual que Gemstone deriva
    lenguaje OOP Smalltalk pero este ultimo dispone
    de capacidad herencia múltiple.
  • Permite
  • Definición de clases
  • Definición jerarquía de clases
  • Crear y manipular objetos complejos
  • Diseñado para soportar de modo natural las
    necesidades de los OO.

45
SGBDOO mas conocidos
  • PDM (Manola y Dayal 1986)
  • Basado modelo funcional datos DAPLEX
  • Por lo que el algebra PDM muy cercana al algebra
    relacional
  • Diferencias (PDM VS RELACIONAL)
  • PDM tiene capacidad aplicarle funciones
    multiargumento a los objetos
  • PDM incluye operador APPLY_APPEND para
    composición de funciones
  • PDM como DAPLEX trata todo como funciones.

46
SGBDOO mas conocidos
  • IRIS (Fishman y otros)
  • Desarrollado por Hewlett Packard.
  • Semejanza cercana a los sistemas relacionales.
  • Utiliza administrador de almacenamiento parecido
    a System R.
  • Soporta lenguaje de consultas SQL (OSQL).
  • Permite representación
  • Objetos
  • Colecciones objetos
  • Operaciones
  • SGBD consiste procesador de consultas que
    implementa modelo datos OO y que soporta
    abstracciones estructurales de alto nivel
    (clasificación, generalización, agregación,).
  • Incluye una extensión a objetos de SQL

47
SGBDOO mas conocidos
  • O2(Leeluse y otros 1988)
  • Soporta
  • Tipos objetos
  • Encapsulacion
  • Herencia
  • Múltiples lenguajes BASIC, C, LISP.
  • Proporciona recursos
  • Encapsulacion
  • Herencia
  • Sobrecarga operadores
  • No define clases y métodos como objetos como
    hacia Gemstone.

48
Índice
  • Introducción
  • Historia de las BDOO
  • Características de BDOO
  • Obligatorias
  • Opcionales y Abiertas
  • Seguridad y otras funcionalidades
  • Ventajas y posibles desventajas
  • SGBDOO vs. SGBDR
  • SGBDOO mas conocidos
  • O2
  • GemStone
  • Conclusiones

49
O2
  • O2 Engine es quien se encarga de la funcionalidad
    del SGBD
  • Proporciona recursos almacenamiento.
  • Obtención y actualización de objetos almacenados
    persistentes que pueden ser compartidos por
    múltiples programas.
  • Basado en arquitectura Cliente/Servidor
  • Contempla los sistemas de computo de redes y
    distribuidos.
  • Maquina servidora almacena a nivel página (
    bloque disco) y no conoce la estructura del
    objeto
  • El servidor ocupa parte del almacenamiento de
    paginas en cache para reducir E/S disco.
  • Control concurrencia basado en bloqueo
  • Resuperación escritura anticipada en bitácora.

50
O2
  • En el nivel funcional O2 Engine tiene 3
    componentes
  • Componente almacenamiento (nivel mas bajo)
  • Utiliza sistema almacenamiento WISS
  • Implementación dividida entre cliente y servido
  • Servidor
  • Maneja disco.
  • Almacena páginas.
  • Lee paginas.
  • Controla recurrencia.
  • Cliente
  • Almacena en cache las paginas
  • Pone las paginas al servicio de los módulos
    funcionales del nivel superior.

51
O2
  • Gestor objetos (nivel intermedio)
  • Estructurar objetos y valores
  • Forma grupos objetos relacionados en paginas en
    disco
  • Mantiene la identidad de los objetos
  • Efectúa operaciones con objetos
  • Los identificadores de objetos se implementaron
    como _at_fis en disco de los objetos
  • Los objetos complejos estructurados se
    descomponen en registros y se usan índices para
    acceso a estructuras de conjuntos o listas.

52
O2
  • Gestor esquemas (nivel mas alto)
  • Lleva control definición
  • Clases
  • Tipos
  • Métodos
  • Provee los mecanismos de herencia
  • Verifica la consistencia de las declaraciones de
    clase
  • Hace posible la evolución de los esquemas

53
Índice
  • Introducción
  • Historia de las BDOO
  • Características de BDOO
  • Obligatorias
  • Opcionales y Abiertas
  • Seguridad y otras funcionalidades
  • Ventajas y posibles desventajas
  • SGBDOO vs. SGBDR
  • SGBDOO mas conocidos
  • O2
  • GemStone
  • Conclusiones

54
GEMSTONE
  • GemStone permite a desarrolladores de
    aplicaciones escribir métodos, los cuales son
    almacenados y ejecutados directamente en la base
    de datos.
  • Estos métodos pueden ser accesados ya sea
    internamente o por aplicaciones cliente externas
  • Esto puede reducir significativamente el tráfico
    en la red y permitir a las aplicaciones tomar
    ventaja del poder superior de cómputo de el
    servidor

55
GEMSTONE
  • Concurrencia
  • GemStone provee soporte concurrente para
    aplicaciones desarrolladas con Smalltalk, C, C
    y con la herramienta de desarrollo propia de
    GeODE.
  • Todas las aplicaciones, independientemente del
    lenguaje en que estén escritas, pueden tener
    acceso simultáneo a los mismos objetos de la base
    de datos.
  • La Interfaz C de GemStone es una librería de
    funciones que pueden ser llamadas desde lenguajes
    que permiten llamadas a funciones C, incluyendo
    Ada, COBOL, Pascal, FORTRAN, LISP, y C Objetivo.
  • La Interfaz C de GemStone provee almacenamiento
    persistente para aplicaciones C.

56
GEMSTONE
  • Control de Transacciones
  • Múltiples usuarios pueden operar en la base de
    datos simultáneamente, con una variedad de modos
    para el control de transacciones disponibles
    (como bloqueo optimista o pesimista
  • Seguridad a Nivel de Objeto
  • El control de autorización puede ser aplicado a
    cualquier objeto en la base de datos, permitiendo
    una refinación de la seguridad de objetos.

57
GEMSTONE
  • Esquema Dinámico y Evolución de Objetos
  • GemStone soporta la modificación de esquema a
    través del versionamiento de clases y permite una
    total migración de objetos entre versiones de sus
    clases con un simple envío de mensajes. La
    migración es totalmente personalizable y puede
    ser revertida.
  • Escalabilidad
  • GemStone tiene la capacidad para soportar 1,000
    logins y 100 usuarios activos concurrentemente en
    un servidor SMP de tamaño mediano. Esta
    característica indica que GemStone es lo
    suficientemente poderoso por lo menos para
    aplicaciones departamentales

58
GEMSTONE
  • Gateways
  • GemStone incorpora gateways o bridges (puentes)
    de datos que permiten a aplicaciones de objetos
    integrar datos válidos, en formatos SQL, IMS,
    VSAM y otros. El nivel de integración entre
    GemStone y datos válidos, y aplicaciones puede
    variar desde un simple query hasta una intensiva
    interoperabilidad de lectura/escritura. Esta
    nueva característica es particularmente útil en
    el papel que desempeña GemStone como servidor de
    aplicaciones, como una de las principales tareas
    de este servidor para mapear peticiones de
    clientes en una variedad de administradores de
    datos

59
GEMSTONE
  • ArquitecturaGemStone fue diseñado como un
    sistema cliente-servidor y consiste de dos tipos
    de procesos El Gem y el Stone, y el GemStone
    Smalltalk Interface (GSI).

60
GEMSTONE
  • El Gem
  • Es el front-end, y puede correr ya sea en el
    cliente o en el servidor, esto dependiendo de
    consideraciones como el tráfico en la red y el
    rendimiento.
  • Maneja la compilación Smalltalk y provee una
    librería de clases predefinidas de cerca de 500
    clases y 12,000 métodos.
  • Cuando es remoto al Stone, el Gem puede ser
    configurado para buscar, almacenar en cache o
    bloquear páginas, objetos, o segmentos de datos
    completos.
  • Cada Gem toma aproximadamente 1MB de RAM, y esto
    pone un límite práctico al número de usuarios
    simultáneos soportados.
  • Una máquina de 32 bits tiene un espacio de
    direccionamiento virtual de 4GB, y puede tener
    hasta 1GB de RAM física. La mitad de la cual es
    asignada al cache, y los restantes 500MB son
    suficientes para 500 usuarios.

61
GEMSTONE
  • El Stone
  • Es el administrador de la base de datos.
  • Se ejecuta siempre en el servidor.
  • Las funciones como E/S de disco, concurrencia,
    transacciones, recuperación y seguridad son
    responsabilidades del Stone.
  • Existe un Stone por base de datos.

62
GEMSTONE
  • El GSI
  • Siempre se ejecuta en el cliente
  • Traduce clases Smalltalk y mantiene la coherencia
    de cache.
  • Dos versiones
  • Una versión enlazada, la cual comparte el mismo
    espacio de direccionamiento con el Gem
  • Una versión RPC, la cual permite al GSI ser
    ejecutado en una máquina remota.
  • Los objetos son automáticamente recolectados a la
    basura cuando ya no son referenciados.

63
Índice
  • Introducción
  • Historia de las BDOO
  • Características de BDOO
  • Obligatorias
  • Opcionales y Abiertas
  • Seguridad y otras funcionalidades
  • Ventajas y posibles desventajas
  • SGBDOO vs. SGBDR
  • SGBDOO mas conocidos
  • O2
  • GemStone
  • Conclusiones

64
Conclusiones
  • Son las que mejor pueden representar el mundo
    real
  • Los SGBDOO se supone que son los SGBD del futuro
    (3ª generación)
  • Aunque hoy en día sólo abarcan el 1 del mercado
  • Versant y Ozone, dos de las más importantes,
    carecen de información para los usuarios externos
Write a Comment
User Comments (0)
About PowerShow.com