Render large 3D graphs (Millions of vertices & edges)
Okay, thanks everybody! What I ended up doing:


From the vertex &amp; edge lists create a mesh via python api:

# Create mesh &amp; object
mesh = bpy.data.meshes.new("mesh")
obj = bpy.data.objects.new("graph", mesh)

scene = bpy.context.scene
scene.objects.link(obj)
scene.objects.active = obj
obj.select = True

mesh = bpy.context.object.data
bm = bmesh.new()

# Example data - replace with parser
node_dic = {0: (1,0,0), 1: (0,1,0), 2: (0,0,1), 3: (1, 1, 0)}
edge_list =[(0,1), (1,2), (2,3), (3,0)]
index_map = {}

# Add vertices to object:
for node_id, node_pos in node_dic.items():
    pos = np.array(node_pos)
    v = bm.verts.new(pos)
    index_map[node_id] = v 

# Add edges to object:
for edge in edge_list:
    bm.edges.new((index_map[edge[0]], index_map[edge[1]])) 

bm.to_mesh(mesh)
bm.free()

This allows for very fast import of rather large graphs (several million vertices and edges). Now for visualizing the vertices as spheres or anything else use dupliverts (https://docs.blender.org/manual/en/dev/editors/3dview/object/properties/duplication/dupliverts.html) on that object.
Visualize the edges between nodes by adding a material to the object.