SlideShare ist ein Scribd-Unternehmen logo
1 von 21
Downloaden Sie, um offline zu lesen
Monday, April 8, 13
Creating Successful
Magento ERP Integrations
Monday, April 8, 13
Happy Together
Creating Successful
Magento ERP Integrations
CTO / Lead Engineer
www.classyllama.com
David Alger
Monday, April 8, 13
A Little About Me
• Exclusively focused on Magento eCommerce since early ’09
• Member of the Magento Technical Partner Council
• Member of the Magento Certification Advisory Board
• Magento Certified Developer Plus
• Magento Front End Certified Developer
• Zend Certified Engineer
• Experienced Software Integrator
Monday, April 8, 13
Architecting and engineering a Magento ERP integration while
avoiding the pitfalls and challenges that come with integrating
multiple enterprise-level software components
Creating Magento ERP Integrations
Monday, April 8, 13
What’s On Our Agenda
• Reasons for Integrating
• Purpose Driven Nature
• Architectural Design
• Facing Challenges
• Engineering Solutions
• Integration Scalability
Monday, April 8, 13
Why an Integration?
• An ERP in simple terms:
– Software built around the premise of having the ability to manage all of
the information and functions of a company seamlessly and in real-time
• What benefits are there?
– Centralization, accuracy, less hassle!
• Order Fulfillment
• Customer Service
• Product Management
• Integrating Magento with your ERP means an increase in efficiency
Monday, April 8, 13
Purpose Driven Nature
• Integrations with any software should be purpose driven
• What are the goals of the integration?
– Example: Guaranteed accurate information across properties
– Example: Less headaches during order fulfillment
Monday, April 8, 13
Architectural Design
• The importance of having an integration “blueprint”
– Information Coverage
– Master of Record
– Direction of Flow
• Pre-requisites for designing a workable solution
– Insights into business process
– Familiarity with software
– Knowledge of the data
• Integration paradigms
– Middleware vs Direct
Monday, April 8, 13
Typical Technical “Blueprint”
1. Integration Goals / Summary
2. Integration Dependencies
3. Integration Method
4. Integration Requirements
4.1. Product Information
4.1.1. Inventory
4.1.2. Pricing
4.1.2.1. General Pricing
4.1.2.2. Customer Tiers
4.2. Customer Accounts
4.3. Orders
4.3.1. Export
4.3.2. Fulfillment / Updates
4.3.3. Payment Processing
Monday, April 8, 13
Facing Challenges
• Using COTS (Commercial Off the Shelf) products
• Controlling data exposure at connection points
– aka PCI-DSS compliance
• Real-time data synchronization: Is it possible or even worth it?
• Maintaining data integrity between disparate systems
• Overall reliability of the integration processes
Monday, April 8, 13
Engineering Solutions
• Methods of Direct Integration
• Managing Memory Leaks
• Building a Scalable Integration
Monday, April 8, 13
Methods of Direct Integration
• Database
– Remote
– Local
• Flat Files
• Web Services
• Combinations
Monday, April 8, 13
Managing Memory Leaks
• PHP 5.3 Garbage Collector
– Largely addressed circular reference memory leaks
– Far better than PHP 5.2 but doesn’t eliminate all possible leaks
– Global anonymous functions can still be orphaned!
• Looping over all records of a large catalog in one execution is a practical
impossibility... particularly when running PHP 5.2 or GC disabled
• Using memory_get_usage and a bit of clever logic:
– We can prevent processes dying due to memory leaks
– Create a robust and reliable process manager
Monday, April 8, 13
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
abstract class CLS_Integration_Model_Process_Abstract
{
protected static function _getMemLimit() {
static $limit = NULL;
if ($limit === NULL) {
$value = trim(ini_get('memory_limit'));
$code = strtolower($value[strlen($value)-1]);
switch ($code) {
case 'g': // intentional fall through
$value *= 1024;
case 'm': // intentional fall through
$value *= 1024;
case 'k': // intentional fall through
$value *= 1024;
}
$limit = (int)$value;
}
return $limit;
}
/**
* Reschedules the cron job $interval seconds into the future.
*
* @param Mage_Cron_Model_Schedule $schedule
Monday, April 8, 13
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
* @param CLS_Integration_Model_Resource_Erp_Db_Collection_Abstract $collection
* @param string $callback
*/
protected function _processDataCollection($collection, $callback) {
$index = 0;
$limit = self::_getMemLimit(); // store the memory limit in bytes for calculations
$baseline = 0; // the current memory usage at last iteration
$delta = 0; // maximum difference in memory usgae from one iteration to the next
$space = NULL; // the remaining number of iterations we have based on the $delta
foreach ($collection as $record) {
$baseline = memory_get_usage(); // update the baseline
try {
$this->$callback($record); // process the record
} catch (Zend_Db_Exception $e) {
// catch, log and skip items where an exception (like a deadlock or lock timeout) occurs...
Mage::logException($e);
continue;
}
if ($index == 0) {
$baseline = memory_get_usage(); // first iteration, update this post-processing to avoid inflated delta
} else {
$delta = max($delta, memory_get_usage() - $baseline, 0.0001); // calculate memory usage delta
$space = floor(($limit - memory_get_usage()) / $delta); // calculate approximate space for iterations
}
// if we have space for less than 100 estimated iteration remaining, log a message and break to cleanup
if ($space !== NULL && $space <= 100) {
Mage::log("CLS_Integration [".__CLASS__."::".__FUNCTION__."]: Must terminate, within 100"
." iterations of remaining space allowed by memory_limit!");
return false;
}
}
return true;
}
}
Monday, April 8, 13
Building a Scalable Integration
• Dealing with large amounts of data
– Polling for changes
– Data write throughput
– Index management
• Managing integration processes
– Use the built-in cron dispatcher for job execution
– Thread locks are critical to avoid racing and overworking jobs
– A page cursor can come in very handy when polling is used
Monday, April 8, 13
}
/**
* Reschedules the cron job $interval seconds into the future.
*
* @param Mage_Cron_Model_Schedule $schedule
* @param int $interval
*/
protected function _rescheduleCron(Mage_Cron_Model_Schedule $pSchedule, $interval = 10) {
$timestamp = Mage::getSingleton('core/date')->gmtTimestamp()+$interval;
$schedule = Mage::getModel('cron/schedule');
$schedule->setJobCode($pSchedule->getJobCode())
->setStatus(Mage_Cron_Model_Schedule::STATUS_PENDING)
->setCreatedAt($timestamp)
->setScheduledAt($timestamp)
;
$schedule->save();
return $this;
}
/**
* Takes a data collections and process it within a memory monitoring loop
*
* @param CLS_Integration_Model_Resource_Erp_Db_Collection_Abstract $collectionMonday, April 8, 13
--
-- cls_integration_process_lock - table schema
--
CREATE TABLE `cls_integration_process_lock` (
`code` varchar(50) NOT NULL COMMENT 'Job Code',
`locked_at` timestamp NULL DEFAULT NULL COMMENT 'Locked At',
`freed_at` timestamp NULL DEFAULT NULL COMMENT 'Freed At',
`status` smallint(6) NOT NULL DEFAULT '0' COMMENT 'Lock Status',
PRIMARY KEY (`code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Holds an atomically set lock to prevent overlapping jobs.';
--
-- cls_integration_process_lock - atomic lock update
-- ref: CLS_Integration_Model_Resource_Process_Lock::obtainLock
--
UPDATE `cls_integration_process_lock` SET `status` = 1 WHERE `status` = 0 AND `code` = 'product';
8e7c0768e7c076 a minute agoa minute ago BlameBlame FuFu
Blog · Report a bug · Support · Documentation · API · Forum · Server status · Terms of service · Privacy policy
Monday, April 8, 13
--
-- cls_integration_process_lock - table schema
--
CREATE TABLE `cls_integration_process_lock` (
`code` varchar(50) NOT NULL COMMENT 'Job Code',
`locked_at` timestamp NULL DEFAULT NULL COMMENT 'Locked At',
`freed_at` timestamp NULL DEFAULT NULL COMMENT 'Freed At',
`status` smallint(6) NOT NULL DEFAULT '0' COMMENT 'Lock Status',
PRIMARY KEY (`code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Holds an atomically set lock to prevent overlapping jobs.';
--
-- cls_integration_process_lock - atomic lock update
-- ref: CLS_Integration_Model_Resource_Process_Lock::obtainLock
--
UPDATE `cls_integration_process_lock` SET `status` = 1 WHERE `status` = 0 AND `code` = 'product';
8e7c0768e7c076 a minute agoa minute ago BlameBlame FuFu
Blog · Report a bug · Support · Documentation · API · Forum · Server status · Terms of service · Privacy policy
Monday, April 8, 13
Questions or Comments?
David Alger (@blackbooker)
CTO / Lead Engineer
www.classyllama.com
david@classyllama.com
http://bit.ly/imagine-erp
P.S.W
E’R
E
H
IR
IN
G
!!!
Monday, April 8, 13

Weitere ähnliche Inhalte

Was ist angesagt?

Cake PHP 3 Presentaion
Cake PHP 3 PresentaionCake PHP 3 Presentaion
Cake PHP 3 Presentaionglslarmenta
 
Drupal 8 Services And Dependency Injection
Drupal 8 Services And Dependency InjectionDrupal 8 Services And Dependency Injection
Drupal 8 Services And Dependency InjectionPhilip Norton
 
Getting Into Drupal 8 Configuration
Getting Into Drupal 8 ConfigurationGetting Into Drupal 8 Configuration
Getting Into Drupal 8 ConfigurationPhilip Norton
 
Database Connection With Mysql
Database Connection With MysqlDatabase Connection With Mysql
Database Connection With MysqlHarit Kothari
 
Php MySql For Beginners
Php MySql For BeginnersPhp MySql For Beginners
Php MySql For BeginnersPriti Solanki
 
Building a theming system with React - Matteo Ronchi - Codemotion Amsterdam 2017
Building a theming system with React - Matteo Ronchi - Codemotion Amsterdam 2017Building a theming system with React - Matteo Ronchi - Codemotion Amsterdam 2017
Building a theming system with React - Matteo Ronchi - Codemotion Amsterdam 2017Codemotion
 
PHP and MySQL PHP Written as a set of CGI binaries in C in ...
PHP and MySQL PHP Written as a set of CGI binaries in C in ...PHP and MySQL PHP Written as a set of CGI binaries in C in ...
PHP and MySQL PHP Written as a set of CGI binaries in C in ...webhostingguy
 
System performance tuning
System performance tuningSystem performance tuning
System performance tuningMenandro Oba
 
Drupal 8 configuration management
Drupal 8 configuration managementDrupal 8 configuration management
Drupal 8 configuration managementAlexander Tkachev
 

Was ist angesagt? (14)

Php database connectivity
Php database connectivityPhp database connectivity
Php database connectivity
 
Cake PHP 3 Presentaion
Cake PHP 3 PresentaionCake PHP 3 Presentaion
Cake PHP 3 Presentaion
 
Drupal 8 Services And Dependency Injection
Drupal 8 Services And Dependency InjectionDrupal 8 Services And Dependency Injection
Drupal 8 Services And Dependency Injection
 
Getting Into Drupal 8 Configuration
Getting Into Drupal 8 ConfigurationGetting Into Drupal 8 Configuration
Getting Into Drupal 8 Configuration
 
Drupal 8 Services
Drupal 8 ServicesDrupal 8 Services
Drupal 8 Services
 
Database Connection With Mysql
Database Connection With MysqlDatabase Connection With Mysql
Database Connection With Mysql
 
PHP and MySQL
PHP and MySQLPHP and MySQL
PHP and MySQL
 
Php MySql For Beginners
Php MySql For BeginnersPhp MySql For Beginners
Php MySql For Beginners
 
Building a theming system with React - Matteo Ronchi - Codemotion Amsterdam 2017
Building a theming system with React - Matteo Ronchi - Codemotion Amsterdam 2017Building a theming system with React - Matteo Ronchi - Codemotion Amsterdam 2017
Building a theming system with React - Matteo Ronchi - Codemotion Amsterdam 2017
 
PHP and MySQL PHP Written as a set of CGI binaries in C in ...
PHP and MySQL PHP Written as a set of CGI binaries in C in ...PHP and MySQL PHP Written as a set of CGI binaries in C in ...
PHP and MySQL PHP Written as a set of CGI binaries in C in ...
 
4.3 MySQL + PHP
4.3 MySQL + PHP4.3 MySQL + PHP
4.3 MySQL + PHP
 
Alfredo-PUMEX
Alfredo-PUMEXAlfredo-PUMEX
Alfredo-PUMEX
 
System performance tuning
System performance tuningSystem performance tuning
System performance tuning
 
Drupal 8 configuration management
Drupal 8 configuration managementDrupal 8 configuration management
Drupal 8 configuration management
 

Andere mochten auch

Data Isolation and Merchandizing in a Single Magento Instance | Imagine 2013 ...
Data Isolation and Merchandizing in a Single Magento Instance | Imagine 2013 ...Data Isolation and Merchandizing in a Single Magento Instance | Imagine 2013 ...
Data Isolation and Merchandizing in a Single Magento Instance | Imagine 2013 ...Atwix
 
Host and Boast: Best Practices for Magento Hosting | Imagine 2013 Technolog…
Host and Boast: Best Practices for Magento Hosting | Imagine 2013 Technolog…Host and Boast: Best Practices for Magento Hosting | Imagine 2013 Technolog…
Host and Boast: Best Practices for Magento Hosting | Imagine 2013 Technolog…Atwix
 
Act Now: 10 Tips for Boosting your Business | Magento Imagine 2013 Marketing ...
Act Now: 10 Tips for Boosting your Business | Magento Imagine 2013 Marketing ...Act Now: 10 Tips for Boosting your Business | Magento Imagine 2013 Marketing ...
Act Now: 10 Tips for Boosting your Business | Magento Imagine 2013 Marketing ...Atwix
 
Brands to Beat: Brand Building in an Omni Channel World | Imagine 2013 Strate...
Brands to Beat: Brand Building in an Omni Channel World | Imagine 2013 Strate...Brands to Beat: Brand Building in an Omni Channel World | Imagine 2013 Strate...
Brands to Beat: Brand Building in an Omni Channel World | Imagine 2013 Strate...Atwix
 
Mobile First: Responsive Design for eCommerce | Imagine 2013 Technology | B…
Mobile First: Responsive Design for eCommerce | Imagine 2013 Technology | B…Mobile First: Responsive Design for eCommerce | Imagine 2013 Technology | B…
Mobile First: Responsive Design for eCommerce | Imagine 2013 Technology | B…Atwix
 
The Future of Magento Extensibility | Imagine 2013 Technology | Christopher O...
The Future of Magento Extensibility | Imagine 2013 Technology | Christopher O...The Future of Magento Extensibility | Imagine 2013 Technology | Christopher O...
The Future of Magento Extensibility | Imagine 2013 Technology | Christopher O...Atwix
 
The Importance of Fully Managed Hosting for Magento Enterprise | Imagine 2013...
The Importance of Fully Managed Hosting for Magento Enterprise | Imagine 2013...The Importance of Fully Managed Hosting for Magento Enterprise | Imagine 2013...
The Importance of Fully Managed Hosting for Magento Enterprise | Imagine 2013...Atwix
 
Learning to Fly: How Angry Birds Reached the Heights of Store Performance |…
Learning to Fly: How Angry Birds Reached the Heights of Store Performance |…Learning to Fly: How Angry Birds Reached the Heights of Store Performance |…
Learning to Fly: How Angry Birds Reached the Heights of Store Performance |…Atwix
 

Andere mochten auch (8)

Data Isolation and Merchandizing in a Single Magento Instance | Imagine 2013 ...
Data Isolation and Merchandizing in a Single Magento Instance | Imagine 2013 ...Data Isolation and Merchandizing in a Single Magento Instance | Imagine 2013 ...
Data Isolation and Merchandizing in a Single Magento Instance | Imagine 2013 ...
 
Host and Boast: Best Practices for Magento Hosting | Imagine 2013 Technolog…
Host and Boast: Best Practices for Magento Hosting | Imagine 2013 Technolog…Host and Boast: Best Practices for Magento Hosting | Imagine 2013 Technolog…
Host and Boast: Best Practices for Magento Hosting | Imagine 2013 Technolog…
 
Act Now: 10 Tips for Boosting your Business | Magento Imagine 2013 Marketing ...
Act Now: 10 Tips for Boosting your Business | Magento Imagine 2013 Marketing ...Act Now: 10 Tips for Boosting your Business | Magento Imagine 2013 Marketing ...
Act Now: 10 Tips for Boosting your Business | Magento Imagine 2013 Marketing ...
 
Brands to Beat: Brand Building in an Omni Channel World | Imagine 2013 Strate...
Brands to Beat: Brand Building in an Omni Channel World | Imagine 2013 Strate...Brands to Beat: Brand Building in an Omni Channel World | Imagine 2013 Strate...
Brands to Beat: Brand Building in an Omni Channel World | Imagine 2013 Strate...
 
Mobile First: Responsive Design for eCommerce | Imagine 2013 Technology | B…
Mobile First: Responsive Design for eCommerce | Imagine 2013 Technology | B…Mobile First: Responsive Design for eCommerce | Imagine 2013 Technology | B…
Mobile First: Responsive Design for eCommerce | Imagine 2013 Technology | B…
 
The Future of Magento Extensibility | Imagine 2013 Technology | Christopher O...
The Future of Magento Extensibility | Imagine 2013 Technology | Christopher O...The Future of Magento Extensibility | Imagine 2013 Technology | Christopher O...
The Future of Magento Extensibility | Imagine 2013 Technology | Christopher O...
 
The Importance of Fully Managed Hosting for Magento Enterprise | Imagine 2013...
The Importance of Fully Managed Hosting for Magento Enterprise | Imagine 2013...The Importance of Fully Managed Hosting for Magento Enterprise | Imagine 2013...
The Importance of Fully Managed Hosting for Magento Enterprise | Imagine 2013...
 
Learning to Fly: How Angry Birds Reached the Heights of Store Performance |…
Learning to Fly: How Angry Birds Reached the Heights of Store Performance |…Learning to Fly: How Angry Birds Reached the Heights of Store Performance |…
Learning to Fly: How Angry Birds Reached the Heights of Store Performance |…
 

Ähnlich wie Happy Together: Creating Successful Magento ERP Integrations | Imagine 2013…

Advance Sql Server Store procedure Presentation
Advance Sql Server Store procedure PresentationAdvance Sql Server Store procedure Presentation
Advance Sql Server Store procedure PresentationAmin Uddin
 
6 tips for improving ruby performance
6 tips for improving ruby performance6 tips for improving ruby performance
6 tips for improving ruby performanceEngine Yard
 
PHP Continuous Data Processing
PHP Continuous Data ProcessingPHP Continuous Data Processing
PHP Continuous Data ProcessingMichael Peacock
 
Zend Con 2008 Slides
Zend Con 2008 SlidesZend Con 2008 Slides
Zend Con 2008 Slidesmkherlakian
 
Caching and tuning fun for high scalability @ FrOSCon 2011
Caching and tuning fun for high scalability @ FrOSCon 2011Caching and tuning fun for high scalability @ FrOSCon 2011
Caching and tuning fun for high scalability @ FrOSCon 2011Wim Godden
 
Caching and tuning fun for high scalability @ phpBenelux 2011
Caching and tuning fun for high scalability @ phpBenelux 2011Caching and tuning fun for high scalability @ phpBenelux 2011
Caching and tuning fun for high scalability @ phpBenelux 2011Wim Godden
 
Finding Your Way: Understanding Magento Code
Finding Your Way: Understanding Magento CodeFinding Your Way: Understanding Magento Code
Finding Your Way: Understanding Magento CodeBen Marks
 
Caching and tuning fun for high scalability
Caching and tuning fun for high scalabilityCaching and tuning fun for high scalability
Caching and tuning fun for high scalabilityWim Godden
 
Sql storeprocedure
Sql storeprocedureSql storeprocedure
Sql storeprocedureftz 420
 
Intro To Mvc Development In Php
Intro To Mvc Development In PhpIntro To Mvc Development In Php
Intro To Mvc Development In Phpfunkatron
 
JUDCon London 2011 - Bin packing with drools planner by example
JUDCon London 2011 - Bin packing with drools planner by exampleJUDCon London 2011 - Bin packing with drools planner by example
JUDCon London 2011 - Bin packing with drools planner by exampleGeoffrey De Smet
 
Built-in query caching for all PHP MySQL extensions/APIs
Built-in query caching for all PHP MySQL extensions/APIsBuilt-in query caching for all PHP MySQL extensions/APIs
Built-in query caching for all PHP MySQL extensions/APIsUlf Wendel
 
Magento Live Australia 2016: Request Flow
Magento Live Australia 2016: Request FlowMagento Live Australia 2016: Request Flow
Magento Live Australia 2016: Request FlowVrann Tulika
 
Caching and tuning fun for high scalability
Caching and tuning fun for high scalabilityCaching and tuning fun for high scalability
Caching and tuning fun for high scalabilityWim Godden
 
Sydney Oracle Meetup - execution plans
Sydney Oracle Meetup - execution plansSydney Oracle Meetup - execution plans
Sydney Oracle Meetup - execution planspaulguerin
 
Zend Server Data Caching
Zend Server Data CachingZend Server Data Caching
Zend Server Data CachingEl Taller Web
 
Caching and tuning fun for high scalability @ PHPTour
Caching and tuning fun for high scalability @ PHPTourCaching and tuning fun for high scalability @ PHPTour
Caching and tuning fun for high scalability @ PHPTourWim Godden
 
ONE MORE TIME ABOUT CODE STANDARDS AND BEST PRACTICES
ONE MORE TIME ABOUT CODE STANDARDS AND BEST PRACTICESONE MORE TIME ABOUT CODE STANDARDS AND BEST PRACTICES
ONE MORE TIME ABOUT CODE STANDARDS AND BEST PRACTICESDrupalCamp Kyiv
 

Ähnlich wie Happy Together: Creating Successful Magento ERP Integrations | Imagine 2013… (20)

Advance Sql Server Store procedure Presentation
Advance Sql Server Store procedure PresentationAdvance Sql Server Store procedure Presentation
Advance Sql Server Store procedure Presentation
 
6 tips for improving ruby performance
6 tips for improving ruby performance6 tips for improving ruby performance
6 tips for improving ruby performance
 
PHP Continuous Data Processing
PHP Continuous Data ProcessingPHP Continuous Data Processing
PHP Continuous Data Processing
 
Zend Con 2008 Slides
Zend Con 2008 SlidesZend Con 2008 Slides
Zend Con 2008 Slides
 
Caching and tuning fun for high scalability @ FrOSCon 2011
Caching and tuning fun for high scalability @ FrOSCon 2011Caching and tuning fun for high scalability @ FrOSCon 2011
Caching and tuning fun for high scalability @ FrOSCon 2011
 
Caching and tuning fun for high scalability @ phpBenelux 2011
Caching and tuning fun for high scalability @ phpBenelux 2011Caching and tuning fun for high scalability @ phpBenelux 2011
Caching and tuning fun for high scalability @ phpBenelux 2011
 
Php frameworks
Php frameworksPhp frameworks
Php frameworks
 
Finding Your Way: Understanding Magento Code
Finding Your Way: Understanding Magento CodeFinding Your Way: Understanding Magento Code
Finding Your Way: Understanding Magento Code
 
Caching and tuning fun for high scalability
Caching and tuning fun for high scalabilityCaching and tuning fun for high scalability
Caching and tuning fun for high scalability
 
Sql storeprocedure
Sql storeprocedureSql storeprocedure
Sql storeprocedure
 
Intro To Mvc Development In Php
Intro To Mvc Development In PhpIntro To Mvc Development In Php
Intro To Mvc Development In Php
 
JUDCon London 2011 - Bin packing with drools planner by example
JUDCon London 2011 - Bin packing with drools planner by exampleJUDCon London 2011 - Bin packing with drools planner by example
JUDCon London 2011 - Bin packing with drools planner by example
 
Built-in query caching for all PHP MySQL extensions/APIs
Built-in query caching for all PHP MySQL extensions/APIsBuilt-in query caching for all PHP MySQL extensions/APIs
Built-in query caching for all PHP MySQL extensions/APIs
 
Magento Live Australia 2016: Request Flow
Magento Live Australia 2016: Request FlowMagento Live Australia 2016: Request Flow
Magento Live Australia 2016: Request Flow
 
Oracle SQL Tuning
Oracle SQL TuningOracle SQL Tuning
Oracle SQL Tuning
 
Caching and tuning fun for high scalability
Caching and tuning fun for high scalabilityCaching and tuning fun for high scalability
Caching and tuning fun for high scalability
 
Sydney Oracle Meetup - execution plans
Sydney Oracle Meetup - execution plansSydney Oracle Meetup - execution plans
Sydney Oracle Meetup - execution plans
 
Zend Server Data Caching
Zend Server Data CachingZend Server Data Caching
Zend Server Data Caching
 
Caching and tuning fun for high scalability @ PHPTour
Caching and tuning fun for high scalability @ PHPTourCaching and tuning fun for high scalability @ PHPTour
Caching and tuning fun for high scalability @ PHPTour
 
ONE MORE TIME ABOUT CODE STANDARDS AND BEST PRACTICES
ONE MORE TIME ABOUT CODE STANDARDS AND BEST PRACTICESONE MORE TIME ABOUT CODE STANDARDS AND BEST PRACTICES
ONE MORE TIME ABOUT CODE STANDARDS AND BEST PRACTICES
 

Mehr von Atwix

Igor Miniailo - Magento 2 API Design Best Practices
Igor Miniailo - Magento 2 API Design Best PracticesIgor Miniailo - Magento 2 API Design Best Practices
Igor Miniailo - Magento 2 API Design Best PracticesAtwix
 
Valeriy Nayda - Best Practices in Magento 2. Based on Multi Source Inventory ...
Valeriy Nayda - Best Practices in Magento 2. Based on Multi Source Inventory ...Valeriy Nayda - Best Practices in Magento 2. Based on Multi Source Inventory ...
Valeriy Nayda - Best Practices in Magento 2. Based on Multi Source Inventory ...Atwix
 
Yaroslav Rogoza - Development Environment: Local or Remote?
Yaroslav Rogoza - Development Environment: Local or Remote?Yaroslav Rogoza - Development Environment: Local or Remote?
Yaroslav Rogoza - Development Environment: Local or Remote?Atwix
 
Magento 2 performance comparison in different environments by Yaroslav Rogoza...
Magento 2 performance comparison in different environments by Yaroslav Rogoza...Magento 2 performance comparison in different environments by Yaroslav Rogoza...
Magento 2 performance comparison in different environments by Yaroslav Rogoza...Atwix
 
Viacheslav Kravchuk. Working as a distributed company. Our journey. Meet Mage...
Viacheslav Kravchuk. Working as a distributed company. Our journey. Meet Mage...Viacheslav Kravchuk. Working as a distributed company. Our journey. Meet Mage...
Viacheslav Kravchuk. Working as a distributed company. Our journey. Meet Mage...Atwix
 
Сергей Иващенко - Meet Magento Ukraine - Цены в Magento 2
Сергей Иващенко - Meet Magento Ukraine - Цены в Magento 2Сергей Иващенко - Meet Magento Ukraine - Цены в Magento 2
Сергей Иващенко - Meet Magento Ukraine - Цены в Magento 2Atwix
 
Александр Смага, Юрий Муратов - Meet Magento Ukraine - Технический обзор OroCRM
Александр Смага, Юрий Муратов - Meet Magento Ukraine - Технический обзор OroCRM Александр Смага, Юрий Муратов - Meet Magento Ukraine - Технический обзор OroCRM
Александр Смага, Юрий Муратов - Meet Magento Ukraine - Технический обзор OroCRM Atwix
 
Иван Чепурный - Meet Magento Ukraine - Varnish Cache and its usage in the rea...
Иван Чепурный - Meet Magento Ukraine - Varnish Cache and its usage in the rea...Иван Чепурный - Meet Magento Ukraine - Varnish Cache and its usage in the rea...
Иван Чепурный - Meet Magento Ukraine - Varnish Cache and its usage in the rea...Atwix
 
Владимир Дубина - Meet Magento Ukraine - Data consistency
Владимир Дубина - Meet Magento Ukraine - Data consistencyВладимир Дубина - Meet Magento Ukraine - Data consistency
Владимир Дубина - Meet Magento Ukraine - Data consistencyAtwix
 
Андрей Самиляк - Meet Magento Ukraine - Как мы играли в DevOps и как получилс...
Андрей Самиляк - Meet Magento Ukraine - Как мы играли в DevOps и как получилс...Андрей Самиляк - Meet Magento Ukraine - Как мы играли в DevOps и как получилс...
Андрей Самиляк - Meet Magento Ukraine - Как мы играли в DevOps и как получилс...Atwix
 
Сергей Кибиткин - Meet Magento Ukraine - Что вы никогда не сделаете в Magento
Сергей Кибиткин - Meet Magento Ukraine - Что вы никогда не сделаете в MagentoСергей Кибиткин - Meet Magento Ukraine - Что вы никогда не сделаете в Magento
Сергей Кибиткин - Meet Magento Ukraine - Что вы никогда не сделаете в MagentoAtwix
 
Макс Екатериненко - Meet Magento Ukraine - Magento 2 Overview
Макс Екатериненко - Meet Magento Ukraine - Magento 2 OverviewМакс Екатериненко - Meet Magento Ukraine - Magento 2 Overview
Макс Екатериненко - Meet Magento Ukraine - Magento 2 OverviewAtwix
 
Александр Каранда - Meet Magento Ukraine - Реальность нереальных вещей
Александр Каранда - Meet Magento Ukraine - Реальность нереальных вещейАлександр Каранда - Meet Magento Ukraine - Реальность нереальных вещей
Александр Каранда - Meet Magento Ukraine - Реальность нереальных вещейAtwix
 
Антон Капля - Meet Magento Ukraine - Кодогенератор в Magento
Антон Капля - Meet Magento Ukraine - Кодогенератор в MagentoАнтон Капля - Meet Magento Ukraine - Кодогенератор в Magento
Антон Капля - Meet Magento Ukraine - Кодогенератор в MagentoAtwix
 
Анатолій Денис - Meet Magento Ukraine - Migration to Magento - mission possible
Анатолій Денис - Meet Magento Ukraine - Migration to Magento - mission possibleАнатолій Денис - Meet Magento Ukraine - Migration to Magento - mission possible
Анатолій Денис - Meet Magento Ukraine - Migration to Magento - mission possibleAtwix
 
Артем Кузнецов - Meet Magento Ukraine - инструменты для отдела поддержки, опы...
Артем Кузнецов - Meet Magento Ukraine - инструменты для отдела поддержки, опы...Артем Кузнецов - Meet Magento Ukraine - инструменты для отдела поддержки, опы...
Артем Кузнецов - Meet Magento Ukraine - инструменты для отдела поддержки, опы...Atwix
 
Александр Стельмах - Meet Magento Ukraine - Прибыльная e-mail рассылка за 5 ш...
Александр Стельмах - Meet Magento Ukraine - Прибыльная e-mail рассылка за 5 ш...Александр Стельмах - Meet Magento Ukraine - Прибыльная e-mail рассылка за 5 ш...
Александр Стельмах - Meet Magento Ukraine - Прибыльная e-mail рассылка за 5 ш...Atwix
 
Владимир Галика - Meet Magento Ukraine - Чудесный Новый Мир – почему продвиже...
Владимир Галика - Meet Magento Ukraine - Чудесный Новый Мир – почему продвиже...Владимир Галика - Meet Magento Ukraine - Чудесный Новый Мир – почему продвиже...
Владимир Галика - Meet Magento Ukraine - Чудесный Новый Мир – почему продвиже...Atwix
 
Александр Колб - Meet Magento Ukraine - психология потребления онлайн
Александр Колб - Meet Magento Ukraine - психология потребления онлайнАлександр Колб - Meet Magento Ukraine - психология потребления онлайн
Александр Колб - Meet Magento Ukraine - психология потребления онлайнAtwix
 
Елена Леонова - Meet Magento Ukraine - Трасформация в e-commerce с Magento
Елена Леонова - Meet Magento Ukraine - Трасформация в e-commerce с MagentoЕлена Леонова - Meet Magento Ukraine - Трасформация в e-commerce с Magento
Елена Леонова - Meet Magento Ukraine - Трасформация в e-commerce с MagentoAtwix
 

Mehr von Atwix (20)

Igor Miniailo - Magento 2 API Design Best Practices
Igor Miniailo - Magento 2 API Design Best PracticesIgor Miniailo - Magento 2 API Design Best Practices
Igor Miniailo - Magento 2 API Design Best Practices
 
Valeriy Nayda - Best Practices in Magento 2. Based on Multi Source Inventory ...
Valeriy Nayda - Best Practices in Magento 2. Based on Multi Source Inventory ...Valeriy Nayda - Best Practices in Magento 2. Based on Multi Source Inventory ...
Valeriy Nayda - Best Practices in Magento 2. Based on Multi Source Inventory ...
 
Yaroslav Rogoza - Development Environment: Local or Remote?
Yaroslav Rogoza - Development Environment: Local or Remote?Yaroslav Rogoza - Development Environment: Local or Remote?
Yaroslav Rogoza - Development Environment: Local or Remote?
 
Magento 2 performance comparison in different environments by Yaroslav Rogoza...
Magento 2 performance comparison in different environments by Yaroslav Rogoza...Magento 2 performance comparison in different environments by Yaroslav Rogoza...
Magento 2 performance comparison in different environments by Yaroslav Rogoza...
 
Viacheslav Kravchuk. Working as a distributed company. Our journey. Meet Mage...
Viacheslav Kravchuk. Working as a distributed company. Our journey. Meet Mage...Viacheslav Kravchuk. Working as a distributed company. Our journey. Meet Mage...
Viacheslav Kravchuk. Working as a distributed company. Our journey. Meet Mage...
 
Сергей Иващенко - Meet Magento Ukraine - Цены в Magento 2
Сергей Иващенко - Meet Magento Ukraine - Цены в Magento 2Сергей Иващенко - Meet Magento Ukraine - Цены в Magento 2
Сергей Иващенко - Meet Magento Ukraine - Цены в Magento 2
 
Александр Смага, Юрий Муратов - Meet Magento Ukraine - Технический обзор OroCRM
Александр Смага, Юрий Муратов - Meet Magento Ukraine - Технический обзор OroCRM Александр Смага, Юрий Муратов - Meet Magento Ukraine - Технический обзор OroCRM
Александр Смага, Юрий Муратов - Meet Magento Ukraine - Технический обзор OroCRM
 
Иван Чепурный - Meet Magento Ukraine - Varnish Cache and its usage in the rea...
Иван Чепурный - Meet Magento Ukraine - Varnish Cache and its usage in the rea...Иван Чепурный - Meet Magento Ukraine - Varnish Cache and its usage in the rea...
Иван Чепурный - Meet Magento Ukraine - Varnish Cache and its usage in the rea...
 
Владимир Дубина - Meet Magento Ukraine - Data consistency
Владимир Дубина - Meet Magento Ukraine - Data consistencyВладимир Дубина - Meet Magento Ukraine - Data consistency
Владимир Дубина - Meet Magento Ukraine - Data consistency
 
Андрей Самиляк - Meet Magento Ukraine - Как мы играли в DevOps и как получилс...
Андрей Самиляк - Meet Magento Ukraine - Как мы играли в DevOps и как получилс...Андрей Самиляк - Meet Magento Ukraine - Как мы играли в DevOps и как получилс...
Андрей Самиляк - Meet Magento Ukraine - Как мы играли в DevOps и как получилс...
 
Сергей Кибиткин - Meet Magento Ukraine - Что вы никогда не сделаете в Magento
Сергей Кибиткин - Meet Magento Ukraine - Что вы никогда не сделаете в MagentoСергей Кибиткин - Meet Magento Ukraine - Что вы никогда не сделаете в Magento
Сергей Кибиткин - Meet Magento Ukraine - Что вы никогда не сделаете в Magento
 
Макс Екатериненко - Meet Magento Ukraine - Magento 2 Overview
Макс Екатериненко - Meet Magento Ukraine - Magento 2 OverviewМакс Екатериненко - Meet Magento Ukraine - Magento 2 Overview
Макс Екатериненко - Meet Magento Ukraine - Magento 2 Overview
 
Александр Каранда - Meet Magento Ukraine - Реальность нереальных вещей
Александр Каранда - Meet Magento Ukraine - Реальность нереальных вещейАлександр Каранда - Meet Magento Ukraine - Реальность нереальных вещей
Александр Каранда - Meet Magento Ukraine - Реальность нереальных вещей
 
Антон Капля - Meet Magento Ukraine - Кодогенератор в Magento
Антон Капля - Meet Magento Ukraine - Кодогенератор в MagentoАнтон Капля - Meet Magento Ukraine - Кодогенератор в Magento
Антон Капля - Meet Magento Ukraine - Кодогенератор в Magento
 
Анатолій Денис - Meet Magento Ukraine - Migration to Magento - mission possible
Анатолій Денис - Meet Magento Ukraine - Migration to Magento - mission possibleАнатолій Денис - Meet Magento Ukraine - Migration to Magento - mission possible
Анатолій Денис - Meet Magento Ukraine - Migration to Magento - mission possible
 
Артем Кузнецов - Meet Magento Ukraine - инструменты для отдела поддержки, опы...
Артем Кузнецов - Meet Magento Ukraine - инструменты для отдела поддержки, опы...Артем Кузнецов - Meet Magento Ukraine - инструменты для отдела поддержки, опы...
Артем Кузнецов - Meet Magento Ukraine - инструменты для отдела поддержки, опы...
 
Александр Стельмах - Meet Magento Ukraine - Прибыльная e-mail рассылка за 5 ш...
Александр Стельмах - Meet Magento Ukraine - Прибыльная e-mail рассылка за 5 ш...Александр Стельмах - Meet Magento Ukraine - Прибыльная e-mail рассылка за 5 ш...
Александр Стельмах - Meet Magento Ukraine - Прибыльная e-mail рассылка за 5 ш...
 
Владимир Галика - Meet Magento Ukraine - Чудесный Новый Мир – почему продвиже...
Владимир Галика - Meet Magento Ukraine - Чудесный Новый Мир – почему продвиже...Владимир Галика - Meet Magento Ukraine - Чудесный Новый Мир – почему продвиже...
Владимир Галика - Meet Magento Ukraine - Чудесный Новый Мир – почему продвиже...
 
Александр Колб - Meet Magento Ukraine - психология потребления онлайн
Александр Колб - Meet Magento Ukraine - психология потребления онлайнАлександр Колб - Meet Magento Ukraine - психология потребления онлайн
Александр Колб - Meet Magento Ukraine - психология потребления онлайн
 
Елена Леонова - Meet Magento Ukraine - Трасформация в e-commerce с Magento
Елена Леонова - Meet Magento Ukraine - Трасформация в e-commerce с MagentoЕлена Леонова - Meet Magento Ukraine - Трасформация в e-commerce с Magento
Елена Леонова - Meet Magento Ukraine - Трасформация в e-commerce с Magento
 

Kürzlich hochgeladen

08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEarley Information Science
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Paola De la Torre
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024Results
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 

Kürzlich hochgeladen (20)

08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 

Happy Together: Creating Successful Magento ERP Integrations | Imagine 2013…

  • 2. Creating Successful Magento ERP Integrations Monday, April 8, 13
  • 3. Happy Together Creating Successful Magento ERP Integrations CTO / Lead Engineer www.classyllama.com David Alger Monday, April 8, 13
  • 4. A Little About Me • Exclusively focused on Magento eCommerce since early ’09 • Member of the Magento Technical Partner Council • Member of the Magento Certification Advisory Board • Magento Certified Developer Plus • Magento Front End Certified Developer • Zend Certified Engineer • Experienced Software Integrator Monday, April 8, 13
  • 5. Architecting and engineering a Magento ERP integration while avoiding the pitfalls and challenges that come with integrating multiple enterprise-level software components Creating Magento ERP Integrations Monday, April 8, 13
  • 6. What’s On Our Agenda • Reasons for Integrating • Purpose Driven Nature • Architectural Design • Facing Challenges • Engineering Solutions • Integration Scalability Monday, April 8, 13
  • 7. Why an Integration? • An ERP in simple terms: – Software built around the premise of having the ability to manage all of the information and functions of a company seamlessly and in real-time • What benefits are there? – Centralization, accuracy, less hassle! • Order Fulfillment • Customer Service • Product Management • Integrating Magento with your ERP means an increase in efficiency Monday, April 8, 13
  • 8. Purpose Driven Nature • Integrations with any software should be purpose driven • What are the goals of the integration? – Example: Guaranteed accurate information across properties – Example: Less headaches during order fulfillment Monday, April 8, 13
  • 9. Architectural Design • The importance of having an integration “blueprint” – Information Coverage – Master of Record – Direction of Flow • Pre-requisites for designing a workable solution – Insights into business process – Familiarity with software – Knowledge of the data • Integration paradigms – Middleware vs Direct Monday, April 8, 13
  • 10. Typical Technical “Blueprint” 1. Integration Goals / Summary 2. Integration Dependencies 3. Integration Method 4. Integration Requirements 4.1. Product Information 4.1.1. Inventory 4.1.2. Pricing 4.1.2.1. General Pricing 4.1.2.2. Customer Tiers 4.2. Customer Accounts 4.3. Orders 4.3.1. Export 4.3.2. Fulfillment / Updates 4.3.3. Payment Processing Monday, April 8, 13
  • 11. Facing Challenges • Using COTS (Commercial Off the Shelf) products • Controlling data exposure at connection points – aka PCI-DSS compliance • Real-time data synchronization: Is it possible or even worth it? • Maintaining data integrity between disparate systems • Overall reliability of the integration processes Monday, April 8, 13
  • 12. Engineering Solutions • Methods of Direct Integration • Managing Memory Leaks • Building a Scalable Integration Monday, April 8, 13
  • 13. Methods of Direct Integration • Database – Remote – Local • Flat Files • Web Services • Combinations Monday, April 8, 13
  • 14. Managing Memory Leaks • PHP 5.3 Garbage Collector – Largely addressed circular reference memory leaks – Far better than PHP 5.2 but doesn’t eliminate all possible leaks – Global anonymous functions can still be orphaned! • Looping over all records of a large catalog in one execution is a practical impossibility... particularly when running PHP 5.2 or GC disabled • Using memory_get_usage and a bit of clever logic: – We can prevent processes dying due to memory leaks – Create a robust and reliable process manager Monday, April 8, 13
  • 15. 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 abstract class CLS_Integration_Model_Process_Abstract { protected static function _getMemLimit() { static $limit = NULL; if ($limit === NULL) { $value = trim(ini_get('memory_limit')); $code = strtolower($value[strlen($value)-1]); switch ($code) { case 'g': // intentional fall through $value *= 1024; case 'm': // intentional fall through $value *= 1024; case 'k': // intentional fall through $value *= 1024; } $limit = (int)$value; } return $limit; } /** * Reschedules the cron job $interval seconds into the future. * * @param Mage_Cron_Model_Schedule $schedule Monday, April 8, 13
  • 16. 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 * @param CLS_Integration_Model_Resource_Erp_Db_Collection_Abstract $collection * @param string $callback */ protected function _processDataCollection($collection, $callback) { $index = 0; $limit = self::_getMemLimit(); // store the memory limit in bytes for calculations $baseline = 0; // the current memory usage at last iteration $delta = 0; // maximum difference in memory usgae from one iteration to the next $space = NULL; // the remaining number of iterations we have based on the $delta foreach ($collection as $record) { $baseline = memory_get_usage(); // update the baseline try { $this->$callback($record); // process the record } catch (Zend_Db_Exception $e) { // catch, log and skip items where an exception (like a deadlock or lock timeout) occurs... Mage::logException($e); continue; } if ($index == 0) { $baseline = memory_get_usage(); // first iteration, update this post-processing to avoid inflated delta } else { $delta = max($delta, memory_get_usage() - $baseline, 0.0001); // calculate memory usage delta $space = floor(($limit - memory_get_usage()) / $delta); // calculate approximate space for iterations } // if we have space for less than 100 estimated iteration remaining, log a message and break to cleanup if ($space !== NULL && $space <= 100) { Mage::log("CLS_Integration [".__CLASS__."::".__FUNCTION__."]: Must terminate, within 100" ." iterations of remaining space allowed by memory_limit!"); return false; } } return true; } } Monday, April 8, 13
  • 17. Building a Scalable Integration • Dealing with large amounts of data – Polling for changes – Data write throughput – Index management • Managing integration processes – Use the built-in cron dispatcher for job execution – Thread locks are critical to avoid racing and overworking jobs – A page cursor can come in very handy when polling is used Monday, April 8, 13
  • 18. } /** * Reschedules the cron job $interval seconds into the future. * * @param Mage_Cron_Model_Schedule $schedule * @param int $interval */ protected function _rescheduleCron(Mage_Cron_Model_Schedule $pSchedule, $interval = 10) { $timestamp = Mage::getSingleton('core/date')->gmtTimestamp()+$interval; $schedule = Mage::getModel('cron/schedule'); $schedule->setJobCode($pSchedule->getJobCode()) ->setStatus(Mage_Cron_Model_Schedule::STATUS_PENDING) ->setCreatedAt($timestamp) ->setScheduledAt($timestamp) ; $schedule->save(); return $this; } /** * Takes a data collections and process it within a memory monitoring loop * * @param CLS_Integration_Model_Resource_Erp_Db_Collection_Abstract $collectionMonday, April 8, 13
  • 19. -- -- cls_integration_process_lock - table schema -- CREATE TABLE `cls_integration_process_lock` ( `code` varchar(50) NOT NULL COMMENT 'Job Code', `locked_at` timestamp NULL DEFAULT NULL COMMENT 'Locked At', `freed_at` timestamp NULL DEFAULT NULL COMMENT 'Freed At', `status` smallint(6) NOT NULL DEFAULT '0' COMMENT 'Lock Status', PRIMARY KEY (`code`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Holds an atomically set lock to prevent overlapping jobs.'; -- -- cls_integration_process_lock - atomic lock update -- ref: CLS_Integration_Model_Resource_Process_Lock::obtainLock -- UPDATE `cls_integration_process_lock` SET `status` = 1 WHERE `status` = 0 AND `code` = 'product'; 8e7c0768e7c076 a minute agoa minute ago BlameBlame FuFu Blog · Report a bug · Support · Documentation · API · Forum · Server status · Terms of service · Privacy policy Monday, April 8, 13
  • 20. -- -- cls_integration_process_lock - table schema -- CREATE TABLE `cls_integration_process_lock` ( `code` varchar(50) NOT NULL COMMENT 'Job Code', `locked_at` timestamp NULL DEFAULT NULL COMMENT 'Locked At', `freed_at` timestamp NULL DEFAULT NULL COMMENT 'Freed At', `status` smallint(6) NOT NULL DEFAULT '0' COMMENT 'Lock Status', PRIMARY KEY (`code`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Holds an atomically set lock to prevent overlapping jobs.'; -- -- cls_integration_process_lock - atomic lock update -- ref: CLS_Integration_Model_Resource_Process_Lock::obtainLock -- UPDATE `cls_integration_process_lock` SET `status` = 1 WHERE `status` = 0 AND `code` = 'product'; 8e7c0768e7c076 a minute agoa minute ago BlameBlame FuFu Blog · Report a bug · Support · Documentation · API · Forum · Server status · Terms of service · Privacy policy Monday, April 8, 13
  • 21. Questions or Comments? David Alger (@blackbooker) CTO / Lead Engineer www.classyllama.com david@classyllama.com http://bit.ly/imagine-erp P.S.W E’R E H IR IN G !!! Monday, April 8, 13