symfony with mongo and mysql. yes, but why?
TRANSCRIPT
![Page 1: Symfony with mongo and mysql. Yes, but why?](https://reader031.vdocuments.mx/reader031/viewer/2022021918/58ae225c1a28ab7e4a8b5cff/html5/thumbnails/1.jpg)
Symfony with MongoDB AND MySQLYes, but why?!
![Page 2: Symfony with mongo and mysql. Yes, but why?](https://reader031.vdocuments.mx/reader031/viewer/2022021918/58ae225c1a28ab7e4a8b5cff/html5/thumbnails/2.jpg)
wealth management, set free
![Page 3: Symfony with mongo and mysql. Yes, but why?](https://reader031.vdocuments.mx/reader031/viewer/2022021918/58ae225c1a28ab7e4a8b5cff/html5/thumbnails/3.jpg)
![Page 4: Symfony with mongo and mysql. Yes, but why?](https://reader031.vdocuments.mx/reader031/viewer/2022021918/58ae225c1a28ab7e4a8b5cff/html5/thumbnails/4.jpg)
Symfony● Stable● Plenty of Resources● Interoperability● Open Source● + Doctrine!
![Page 5: Symfony with mongo and mysql. Yes, but why?](https://reader031.vdocuments.mx/reader031/viewer/2022021918/58ae225c1a28ab7e4a8b5cff/html5/thumbnails/5.jpg)
Doctrine● Decoupled from Symfony and
optional● DB connections setup in
parameters.yml● Doctrine MongoDB Bundle ● Doctrine Fixtures Bundle
integrated in Symfony standard edition
![Page 6: Symfony with mongo and mysql. Yes, but why?](https://reader031.vdocuments.mx/reader031/viewer/2022021918/58ae225c1a28ab7e4a8b5cff/html5/thumbnails/6.jpg)
From http://symfony.com/doc/current/book/doctrine.html
![Page 7: Symfony with mongo and mysql. Yes, but why?](https://reader031.vdocuments.mx/reader031/viewer/2022021918/58ae225c1a28ab7e4a8b5cff/html5/thumbnails/7.jpg)
A tale of two layers
![Page 8: Symfony with mongo and mysql. Yes, but why?](https://reader031.vdocuments.mx/reader031/viewer/2022021918/58ae225c1a28ab7e4a8b5cff/html5/thumbnails/8.jpg)
wealthbot/app/config/config.yml
![Page 9: Symfony with mongo and mysql. Yes, but why?](https://reader031.vdocuments.mx/reader031/viewer/2022021918/58ae225c1a28ab7e4a8b5cff/html5/thumbnails/9.jpg)
A tale of two layersMySQL = presentation
● Relational● Table● Vertical Scaling● Normalization: make tables as small as
possible (ex: user table)● PAS normalizes to MySQL
Mongo = communication
● Non-relational / NoSQL● Key - value pairs (JSON/BSON)● Horizontal scaling● Denormalization: to quickly get all the data● Standardize into mongo ● Do pre-calcs in mongo (bc it’s faster)
“Makes coding life easier, but must know the structure ahead of time”
“We don't know what the data file will look like from custodians”
![Page 10: Symfony with mongo and mysql. Yes, but why?](https://reader031.vdocuments.mx/reader031/viewer/2022021918/58ae225c1a28ab7e4a8b5cff/html5/thumbnails/10.jpg)
![Page 11: Symfony with mongo and mysql. Yes, but why?](https://reader031.vdocuments.mx/reader031/viewer/2022021918/58ae225c1a28ab7e4a8b5cff/html5/thumbnails/11.jpg)
![Page 12: Symfony with mongo and mysql. Yes, but why?](https://reader031.vdocuments.mx/reader031/viewer/2022021918/58ae225c1a28ab7e4a8b5cff/html5/thumbnails/12.jpg)
MongoDBBundle
● Deal only with plain PHP objects
● Persist transparently to and from MongoDB
● Mapping via DocBlock annotations{
"require": { "doctrine/mongodb-odm": "~1.0", "doctrine/mongodb-odm-bundle": "~3.0" },}
![Page 13: Symfony with mongo and mysql. Yes, but why?](https://reader031.vdocuments.mx/reader031/viewer/2022021918/58ae225c1a28ab7e4a8b5cff/html5/thumbnails/13.jpg)
![Page 14: Symfony with mongo and mysql. Yes, but why?](https://reader031.vdocuments.mx/reader031/viewer/2022021918/58ae225c1a28ab7e4a8b5cff/html5/thumbnails/14.jpg)
![Page 15: Symfony with mongo and mysql. Yes, but why?](https://reader031.vdocuments.mx/reader031/viewer/2022021918/58ae225c1a28ab7e4a8b5cff/html5/thumbnails/15.jpg)
Fixtures Bundle
● Fixtures are PHP classes● Load a controlled set of data● Used for testing or could be the
initial data● Shares Objects between
Fixtures● (enable in app/AppKernal.php)
$ composer require --dev doctrine/doctrine-fixtures-bundle
![Page 16: Symfony with mongo and mysql. Yes, but why?](https://reader031.vdocuments.mx/reader031/viewer/2022021918/58ae225c1a28ab7e4a8b5cff/html5/thumbnails/16.jpg)
![Page 17: Symfony with mongo and mysql. Yes, but why?](https://reader031.vdocuments.mx/reader031/viewer/2022021918/58ae225c1a28ab7e4a8b5cff/html5/thumbnails/17.jpg)
Exampleswealthbot/src/Wealthbot/FixturesBundle/DataFixtures/ORM/LoadClientData.php
class LoadClientData extends AbstractFixture implements OrderedFixtureInterface, ContainerAwareInterface {
private $accounts = array( array( 'consolidator_key' => null, 'group_key' => AccountGroup::GROUP_DEPOSIT_MONEY, 'type_key' => 10, 'financial_institution' => null, 'value' => 20000, 'monthly_contributions' => null, 'monthly_distributions' => null, 'sas_cash' => 1500, ), ...
![Page 18: Symfony with mongo and mysql. Yes, but why?](https://reader031.vdocuments.mx/reader031/viewer/2022021918/58ae225c1a28ab7e4a8b5cff/html5/thumbnails/18.jpg)
Examples cont.wealthbot/src/Wealthbot/FixturesBundle/DataFixtures/ORM/LoadClientData.php
private function createClientAccounts(ObjectManager $manager, User $clientUser) { foreach ($this->accounts as $index => $item) {
$account = new ClientAccount(); $account->setGroupType($groupType); $account->setClient($clientUser); $account->setMonthlyDistributions($item['monthly_distributions']); $account->setSasCash($item['sas_cash']); $accountOwner = new ClientAccountOwner(); $accountOwner->setAccount($account); $accountOwner->setClient($clientUser); $accountOwner->setOwnerType(ClientAccountOwner::OWNER_TYPE_SELF);
}}
![Page 19: Symfony with mongo and mysql. Yes, but why?](https://reader031.vdocuments.mx/reader031/viewer/2022021918/58ae225c1a28ab7e4a8b5cff/html5/thumbnails/19.jpg)
Why not just mongo?
● Cleaner code● More predictable = better unit
testing● Faster dashboards● And yet, flexible enough when
working with custodians
![Page 20: Symfony with mongo and mysql. Yes, but why?](https://reader031.vdocuments.mx/reader031/viewer/2022021918/58ae225c1a28ab7e4a8b5cff/html5/thumbnails/20.jpg)
wealthbot.io
@wealthbot
https://github.com/wealthbot-io/wealthbot