IFC Insert Strategies#

The following insert strategies currently exists or are planned

  • SEQUENCE

  • BULK (planned)

  • PARALLEL (planned)

SEQUENCE#

The SEQUENCE strategy inserts every IFC element 1 by 1 on a single thread. Meaning it is the least performant, but ideal for debugging insert statements individually.

Below is a snippet from the printouts during insert of the MyBeam.ifc file using the SEQUENCE insert strategy

inserting ifc item (1 of 84) "#1=IfcPerson('AdaUser',$,$,$,$,$,$,$)"
SELECT (INSERT IfcPerson {
    Identification := 'AdaUser'
   }
)
inserting ifc item (2 of 84) "#2=IfcOrganization('Assembly For Design and Analysis','Assembly For Design and Analysis',$,$,$)"
SELECT (INSERT IfcOrganization {
    Identification := 'Assembly For Design and Analysis',
    Name := 'Assembly For Design and Analysis'
   }
)
inserting ifc item (31 of 84) "#3=IfcPersonAndOrganization(#1,#2,$)"
WITH
    ifc_1 := (SELECT IfcPerson filter .id = <uuid>"68b74946-fd00-11ec-a5ed-b371333a38a3"),
    ifc_2 := (SELECT IfcOrganization filter .id = <uuid>"68c1068e-fd00-11ec-a5ed-1b36f1090f9c"),
SELECT (INSERT IfcPersonAndOrganization {
    ThePerson := ifc_1,
    TheOrganization := ifc_2
   }
)

BULK#

Note

Not yet started on this strategy.

Using sequential processing, group all similar IFC element types together and use for loops to insert items using lists of dictionary data and using with statements for all related properties that are not in use by other

PARALLEL#

Note

Not yet started on this strategy.

Insert unrelated groups of IFC elements to the EdgeDB instance using different threads. Early tests showed that this offers a substantial performance increase.