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)