• No results found

F ÖRSLAG TILL VIDARE FORSKNING

Förslag till vidare forskning är att utföra flera experiment där grafdatabaser jämförs mot andra data-basarkitekturer som till exempel GIS databaser eller dokumentdatabaser. Andra alternativ är att simu-lera tågtrafik i en grafdatabas så frågorna blir mer komplexa. Ett liknande experiment på signifikant större dataset med fler platser och förbindelser kan ge djupare kunskap om hur förändring i svarstider mellan graf och relationsdatabaser förhåller sig till varandra. Implementera och jämföra algoritmer med olika tidskomplexitet.

Högskolan Dalarna 21

8 Källförteckning

Batra, S., & Tyagi, C. (2012). Comparative analysis of relational and graph databases. International Jour-nal of Soft Computing and Engineering (IJSCE), 2(2), 509-512.

Beaulieu, A. (2009). Learning SQL: master SQL fundamentals. " O'Reilly Media, Inc.".

Blue Eyes Intelligence Engineering and Sciences Publication. (u.å). Home. https://www.blueeyesintel-ligence.org/

Björklund, M. & Paulsson, U. (2003). Seminarieboken. Studentlitteratur. Lund.

Chen, J., Song, Q., Zhao, C., & Li, Z. (2020, April). Graph Database and Relational Database Performance Comparison on a Transportation Network. In International Conference on Advances in Computing and Data Sciences (pp. 407-418). Springer, Singapore.

Chun, W. (2000). Core Python Programming. Prentice Hall PTR

Codd, E. F. (2002). A relational model of data for large shared data banks. In Software pioneers (pp.

263-294). Springer, Berlin, Heidelberg.

DB-Engines. (30 Mars 2021). DB-Engines Ranking of Graph DBMS. https://db-engines.com/en/ran-king/graph+dbms

Harrington, J. L. (2016). Relational database design and implementation. Morgan Kaufmann.

Hurlburt, G. F., Thiruvathukal, G. K., & Lee, M. R. (2017). The Graph Database: Jack of All Trades or Just Not SQL?. IT Professional, 19(6), 21-25.

IDG. (29 april, 2021). benchmark/riktmärke. https://it-ord.idg.se/ord/riktmarke/

IDG. (21 maj, 2021). CRUD. https://it-ord.idg.se/ord/crud/

IDG. (29 april, 2021). csv. https://it-ord.idg.se/ord/csv/

IDG. (29 april, 2021). kant. https://it-ord.idg.se/ord/kant/

IDG. (29 april, 2021). nod. https://it-ord.idg.se/ord/nod/

IDG. (29 april, 2021). skript. https://it-ord.idg.se/ord/skript/

IDG. (5 maj, 2021). sql. https://it-ord.idg.se/ord/sql/

Jaiswal, G., & Agrawal, A. P. (2013). Comparative analysis of Relational and Graph databases. IOSR Journal of Engineering (IOSRJEN), 3(8), 2250-3021.

Karolinska Institutet. (u, å). Data Collection. https://mesh.kib.ki.se/term/D003625/data-collection Lourenço, J. R., Cabral, B., Carreiro, P., Vieira, M., & Bernardino, J. (2015). Choosing the right NoSQL database for the job: a quality attribute evaluation. Journal of Big Data, 2(1), 1-26.

Medhi, S., & Baruah, H. K. (2017). Relational database and graph database: A comparative analysis.

Journal of Process Management. New Technologies, 5(2), 1-9.

Miler, M., Medak, D., & Odobašić, D. (2014). The shortest path algorithm performance comparison in graph and relational database on a transportation network. Promet-Traffic&Transportation, 26(1), 75-82.

Högskolan Dalarna 22

Microsoft. (1 Juni 2020). SHORTEST_PATH (Transact-SQL) - Example A. Find shortest path between 2 people https://docs.microsoft.com/en-us/sql/relational-databases/graphs/sql-graph-shortest-path?view=sql-server-ver15#examples

Microsoft. (24 September 2018). SQL Graph Achitecture https://docs.microsoft.com/en-us/sql/rela-tional-databases/graphs/sql-graph-architecture?view=sql-server-ver15

Microsoft. (20 Oktober 2017). What’s new in SQL Server 2017 https://docs.microsoft.com/en-us/sql/sql-server/what-s-new-in-sql-server-2017?view=sql-server-2017

Microsoft. (4 November 2019). Graph https://docs.microsoft.com/en-us/sql/sql-server/what-s-new-in-sql-server-ver15?view=sql-server-ver15#graph

Microsoft. (6 April 2021). Index Design Basics https://docs.microsoft.com/en-us/sql/relational-data-bases/sql-server-index-design-guide?view=sql-server-ver15#Basics

Neo4j. (u. å). Graph Database Platform. https://neo4j.com/

Neo4j. (u. å). Graph Database Use Cases. https://neo4j.com/use-cases/

Neo4j. (18 december 2018). Graph Databases for Beginners: Native vs. Non-Native Graph Technology.

https://neo4j.com/blog/native-vs-non-native-graph-technology/

Nielsen, P., & Parui, U. (2011). Microsoft SQL server 2008 bible (Vol. 607). John Wiley & Sons.

Noto, M., & Sato, H. (2000). A Method for the Shortest Path Search by Extended Dijkstra Algorithm.

https://ieeexplore-ieee-org.www.bibproxy.du.se/stamp/stamp.jsp?tp=&arnumber=886462

Oates, B.J. (2006). Researching Information Systems and Computing. London: SAGE Publications Ltd.

Oracle. (30 Mars 2021). What Is a Database. https://www.oracle.com/database/what-is-database/

Reinsel, D., Gantz, J., Rydning, J. (2018). The digitization of the world from edge to core. Framingham:

International Data Corporation.

Robinson, I., Webber, J., & Eifrem, E. (2015). Graph databases: new opportunities for connected data.

" O'Reilly Media, Inc.".

Shneiderman, B. (1984). Response time and display rate in human performance with computers. ACM Computing Surveys (CSUR), 16(3), 265-285.

Springer. (u, å). About Springer. https://www.springer.com/gp/about-springer

Spenik, M., & Sledge, O. (2003). Microsoft SQL Server 2000 DBA survival guide. Sams Publishing.

Trafikverket. (27 april 2020). Trafikverkets uppdrag. https://www.trafikverket.se/om-oss/var-verk-samhet/trafikverkets-uppdrag/

Vicknair, C., Macias, M., Zhao, Z., Nan, X., Chen, Y., & Wilkins, D. (2010, April). A comparison of a graph database and a relational database: a data provenance perspective. In Proceedings of the 48th annual Southeast regional conference (pp. 1-6).

Högskolan Dalarna 23

Bilaga 1 - Python skript för extrahering av platser

import json, csv

platsForbindelse_file = open('platsForbindelse.json', encoding='utf-8') platsForbindelse_data = json.load(platsForbindelse_file)

platsForbindelse_list = platsForbindelse_data['platser']

plats_list = list()

for plats in platsForbindelse_list:

plats_nr = plats['plId']['plNr']

plats_sign = plats['plId']['plSign']

plats_namn = plats['plNamn']

plats = {

'plats_nr': plats_nr, 'plats_sign': plats_sign, 'namn': plats_namn}

plats_list.append(plats)

with open('platser.csv', mode='w', encoding='utf8', newline='') as csv_file:

# Create headers using the dictionary keys.

fieldnames = plats_list[0].keys() # Write headers to csvfile

writer = csv.DictWriter(csv_file, fieldnames=fieldnames) writer.writeheader()

for plats in plats_list:

writer.writerow(plats)

Högskolan Dalarna 24

Bilaga 2 - Python skript för extrahering av grannar

import json, csv

platsForbindelse_file = open('platsForbindelse.json', encoding='utf-8') platsForbindelse_data = json.load(platsForbindelse_file)

platsForbindelse_list = platsForbindelse_data['platser']

plats_list = list() grannar_list = list()

for plats in platsForbindelse_list:

plats_nr = plats['plId']['plNr']

plats_sign = plats['plId']['plSign']

grannar = plats['grannar']

for granne in grannar:

granne_nr = granne['plId']['plNr']

granne_sign = granne['plId']['plSign']

granne_avstand = granne['avstand']

current_granne = { 'plats_nr': plats_nr, 'plats_sign': plats_sign, 'granne_nr': granne_nr, 'granne_sign': granne_sign, 'avstand': granne_avstand}

grannar_list.append(current_granne )

with open('grannar.csv', mode='w', encoding='utf8', newline='') as csv_file:

# Create headers using the dictionary keys.

fieldnames = grannar_list[0].keys() # Write headers to csv file

writer = csv.DictWriter(csv_file, fieldnames=fieldnames) writer.writeheader()

for granne in grannar_list:

writer.writerow(granne)

Högskolan Dalarna 25

Bilaga 3 - SQL källkod

SQL källkod för skapande av nod-tabell samt inläsning av data från platserTEMP CREATE TABLE Platser(

nr INTEGER PRIMARY KEY,

sign NVARCHAR(50) UNIQUE NOT NULL, namn NVARCHAR(50) NOT NULL

) AS NODE;

INSERT INTO dbo.Platser (nr, sign, namn) SELECT plats_nr, plats_sign, namn FROM dbo.platserTEMP;

SQL källkod för skapande av tabell samt inläsning av data från grannarTEMP CREATE TABLE Grannar(

id INTEGER IDENTITY(1,1), plats_nr INTEGER,

plats_sign NVARCHAR(50) NOT NULL, granne_nr INTEGER,

granne_sign NVARCHAR(50) NOT NULL, avstand INTEGER

);

INSERT INTO dbo.Grannar(plats_nr, plats_sign, granne_nr, granne_sign, avstand) SELECT plats_nr, plats_sign, granne_nr, granne_sign, avstand

FROM dbo.grannarTEMP;

SQL källkod för skapande av kant-tabell samt inläsning av data från tabellerna “Platser”, “Grannar”

CREATE TABLE dbo.forbindelser (avstand INTEGER) AS EDGE;

DECLARE @Counter INT, @MaxId INT, @plats_nr INT, @granne_nr INT, @avstand INT SELECT @Counter = MIN(id), @MaxId = MAX(id)

FROM dbo.Grannar

WHILE (@Counter <= @MaxId) BEGIN

SELECT @plats_nr = plats_nr, @granne_nr = granne_nr, @avstand = avstand

FROM dbo.Grannar WHERE id = @Counter INSERT INTO dbo.forbindelser

VALUES ((SELECT $node_id FROM Platser WHERE nr = @plats_nr), (SELECT $node_id FROM Platser WHERE nr = @granne_nr), @avstand)

SET @Counter = @Counter + 1 END

Högskolan Dalarna 26

Bilaga 4 - Cypher källkod

Cypher källkod för inläsning av data från “platser.csv” samt skapande av noder.

LOAD CSV WITH HEADERS FROM "file:///platser.csv" AS row

CREATE (p:Plats {plats_nr: toInteger(row.plats_nr), plats_sign: row.plats_sign, namn: row.namn})

Cypher källkod för inläsning av data från “forbindelser.csv” samt skapande av kanter.

:auto USING PERIODIC COMMIT

LOAD CSV WITH HEADERS FROM "file:///forbindelser.csv" AS row

MATCH (plats:Plats {plats_nr: toInteger(row.plats_nr)}), (plats2:Plats {plats_nr: toInte-ger(row.granne_nr)})

CREATE (plats)-[:AVSTAND {avstand: row.avstand}]->(plats2)

Related documents