4. XHProf
~ 4 seconds for 50 nodes.
~ 50% of the database time.
~ 100% of the fields update time.
5. Anatomy of the node_save()
field_attach_presave('node', $node);
module_invoke_all('node_presave', $node);
module_invoke_all('entity_presave', $node, 'node');
drupal_write_record('node', $node);
You need all this if you want own fieldable entity.
Procedural code is simple, isn’t it?
_node_save_revision($node, $user->uid);
node_invoke($node, $op); // $op == ‘update’ || $op == ‘insert’
-------------------------------------------------------------------------------------------
// Save fields.$function = "field_attach_$op";$function('node', $node); // field_attatch_update ||
field_attach_insert
module_invoke($storage_info['module'], 'field_storage_write', …..);
field_sql_storage_field_storage_write()
Long time ago in a galaxy far away...
-------------------------------------------------------------------------------------------
module_invoke_all('node_' . $op, $node);module_invoke_all('entity_' . $op, $node, 'node');
node_access_acquire_grants($node, $delete);
entity_get_controller('node')->resetCache(array($node->nid));
13. «I don’t need this»
•
Field SQL Norevisions:
https://drupal.org/project/field_sql_norevisions
•
MongoDB:
https://drupal.org/project/mongodb
•
Per-Bundle Storage:
https://drupal.org/project/pbs
•
EntityFieldQuery Views Backend:
https://drupal.org/project/efq_views
•
Own storage?
14. Imagine
1. Storage level caching
2. Multi-update: node_save_multiple
3. Check if field was changed before
performing a query
4. Simple storage without delta and language
columns.
5. What else?