Базы данных графика и RDF triplestores: устройство хранения данных данных графика в Python

Я использовал бы функцию Database Diagramming в Studio управления SQL Server, но так как Вы исключили это - это работало на меня в SQL Server 2008 (не имейте 2005).

Для получения списка обращения имен таблиц и имен столбцов...

select 
    t.name as TableWithForeignKey, 
    fk.constraint_column_id as FK_PartNo, c.
    name as ForeignKeyColumn 
from 
    sys.foreign_key_columns as fk
inner join 
    sys.tables as t on fk.parent_object_id = t.object_id
inner join 
    sys.columns as c on fk.parent_object_id = c.object_id and fk.parent_column_id = c.column_id
where 
    fk.referenced_object_id = (select object_id 
                               from sys.tables 
                               where name = 'TableOthersForeignKeyInto')
order by 
    TableWithForeignKey, FK_PartNo

Для получения названий ограничений внешнего ключа

select distinct name from sys.objects where object_id in 
(   select fk.constraint_object_id from sys.foreign_key_columns as fk
    where fk.referenced_object_id = 
        (select object_id from sys.tables where name = 'TableOthersForeignKeyInto')
)
19
задан Stefano Borini 20 August 2009 в 00:09
поделиться

4 ответа

Я использовал как Jena, который является Java-фреймворком, так и Allegrograph (Lisp, Java, Python bindings). У Йены есть сестринские проекты по хранению данных графов, и она существует уже давно. Allegrograph довольно хорош и имеет бесплатную версию, думаю, я бы посоветовал это, потому что его легко установить, бесплатно, быстро, и вы могли бы встать и уйти в мгновение ока. Мощность, которую вы получите, изучая немного RDF и SPARQL, вполне может стоить вашего времени. Если вы уже знаете SQL, то вы отлично начинаете. Возможность делать запросы к вашему графику с помощью SPARQL даст вам некоторые большие преимущества. Сериализация в тройном формате RDF была бы легкой, а некоторые из форматов файлов очень просты (например, NT). Приведу пример. Допустим, у вас есть следующий граф node-edge-node ids:

1 <- 2 -> 3
3 <- 4 -> 5

это уже предметная предикатная форма объекта, поэтому просто вставьте на нее какую-нибудь URI-нотацию, загрузите ее в тройное хранилище и запросите ее через SPARQL. Вот она в формате NT:

   .
   .

Теперь запрос для всех узлов два прыжка с узла 1:

SELECT ?node
ГДЕ
  ?p1 ?o1 .
 ?o1 ?p2 ?node .
}

Это, конечно, даст <http://mycompany.com#5>.

Другим кандидатом будет Мулгара, написанная на чистой Яве. Так как вы, кажется, более заинтересованы в Python, хотя я думаю, что вы должны сначала взглянуть на Allegrograph.

.
6
ответ дан 30 November 2019 в 05:11
поделиться

Я думаю, что решение действительно зависит от того, что именно вы хотите делать с графиком после того, как вам удалось сохранить его на диске / в базе данных, и это немного неясно в вашем вопросе . Однако есть несколько вещей, которые вы, возможно, захотите рассмотреть:

  • если вы просто хотите сохранить график без использования каких-либо функций или свойств, которые вы могли бы ожидать от решения rdbms (например, ACID), тогда как насчет травления объекты в плоский файл? Очень примитивно, но, как я уже сказал, зависит от того, чего именно вы хотите достичь.
  • ZODB - это объектная база данных для Python (я думаю, это результат проекта Zope). Я не могу сказать, что у меня был большой опыт использования этого в высокопроизводительной среде, но за исключением нескольких ограничений, все же позволяет вам хранить объекты Python изначально.
  • Если вы хотите использовать RDF, есть проект RDF Alchemy , который может помочь снять некоторые из ваших опасений по поводу преобразования вашего графа в структуры RDF, и я думаю, что Сезам является частью его стека.

Есть и другие Инструменты сохранения , подробно описанные на сайте Python, могут представлять интерес, однако в прошлом году я потратил довольно много времени на изучение этой области и в конечном итоге обнаружил, что не существует собственного решения Python, которое отвечало бы моим требованиям.

Наибольший успех у меня был при использовании MySQL с настраиваемым ORM, и я опубликовал пару соответствующих ссылок в ответе на этот вопрос . Кроме того, если вы хотите внести свой вклад в проект РСУБД, когда я говорил с кем-то из Open Query о движке хранения Graph для MySQL , они, похоже, были заинтересованы в активном участии в своем проекте.

3
ответ дан 30 November 2019 в 05:11
поделиться

Хмм, может вам стоит взглянуть на CubicWeb

1
ответ дан 30 November 2019 в 05:11
поделиться

Что касается Neo4j, заметили ли вы существующие привязки Python ? Что касается дискового хранилища, посмотрите этот поток в списке рассылки .

Для graphdbs в Python был проект Hypergraph Database Management System недавно был запущен на SourceForge Морисом Лингом .

1
ответ дан 30 November 2019 в 05:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: